zsh: неизвестный атрибут файла

У меня есть следующая функция в моем .zshrc, которая, теоретически, позволяет мне написать сообщение фиксации без кавычек.

cm(){
    git commit -m "$@"
}

Когда я запускаю его (cm foo bar), я получаю следующую ошибку:

zsh: unknown file attribute

Означает ли $@ то же самое в zsh, что и в bash?


person Marcel    schedule 13.05.2016    source источник


Ответы (1)


Согласно этой статье, * и @ оба содержат массив позиционных параметров.

Параметры *, @ и argv представляют собой массивы, содержащие все позиционные параметры; таким образом, $argv[n] и т. д. эквивалентны просто $n.

А также...

Нижний индекс формы [*] или [@] соответствует всем элементам массива; между ними нет никакой разницы, за исключением случаев, когда они появляются в двойных кавычках. "$foo[*]" оценивается как "$foo[1] $foo[2] ...", тогда как "$foo[@]" оценивается как "$foo[1]" "$foo[2]" ....

person Adam Lee    schedule 13.05.2016
comment
Кажется, теперь это работает с ${} вместо $. Интересно, почему zsh реализует это по-другому. - person Marcel; 14.05.2016
comment
Вы имеете в виду, что вы заменили $@ в своем коде на ${@}? - person Adam Lee; 14.05.2016
comment
Нет, извините, это было запутанно. Я заменил "$@" на "${*}". Я неправильно написал в своем комментарии, потому что это то, с чего я начал. Я просто переключил $* на $@, когда устранял неполадки. Насколько я понимаю, $@ — это массив, а $* — строка, разделенная пробелами. - person Marcel; 14.05.2016