Об относительных достоинствах “ $ @ "` и `" $ @ "`

Всякий раз, когда я пишу скрипт (или функцию), который должен «передавать» свои аргументы некоторым другим «вызываемым» («двоичным», «скрипт», «функциям» и т. Д. »), Я кодирую это прохождение аргументов, подобных этому

 foo "$@" 

… но я также видел эту альтернативу

 foo "$@[@]" 

Я попытался, безуспешно (по крайней мере, с zsh ), придумать сценарии, в которых эти два подхода приведут к различным результатам.

Действительно ли они синонимы? Если нет, когда вы предпочитаете одну форму над другой?


(Меня в первую очередь интересует случай zsh , который является моей повседневной оболочкой, но на работе мне часто приходится писать сценарии bash , поэтому мне будет интересно узнать ответ на этот вопрос и для bash .)

One Solution collect form web for “Об относительных достоинствах “ $ @ "` и `" $ @ "`”

"$@" – изобретение оболочки Bourne (1979). Это означает расширение списка позиционных параметров, как если бы вы набрали "$1" "$2" "$3"...

Когда Дэвид Корн добавил поддержку массива в начале 80-х, он расширил эту концепцию до массивов с помощью синтаксиса "${array[@]}" . zsh также поддерживает "$array[@]" более короткую форму.

"$@" относится к позиционным параметрам (начиная с $1 ), это немного похоже на массив, но за исключением zsh или yash , а не точно. Для одного, $@ начинается с индекса 1, а другие массивы в ksh или bash начинаются с 0. ${@[@]} не будут работать в ksh или bash .

Единственные оболочки, в которых работает "${@[@]}"zsh и yash . zsh является единственным, где работает "$@[@]" . Нет смысла использовать его над стандартным "$@" . Что может быть более полезным, так это сказать: "$@[1,3]" чтобы получить первые 3 позиционных параметра.

Если точкой является то, что вы хотели бы использовать синтаксис типа массива, в zsh вы можете использовать "$argv[@]" ( $argv – это массив, который ссылается на позиционные параметры, например, в csh / tcsh / fish ) ,

  • "--noprofile" или "--norc" в zsh?
  • Как интерполировать $ {: - = cat} в строке с двумя кавычками?
  • Что делает команда магического пространства zsh?
  • как я могу профилировать время рендеринга в zsh?
  • stty: недопустимый целочисленный аргумент: «CCPP»
  • Как я могу удалить косую черту или слово в zsh?
  • Есть ли встроенный (или, по крайней мере, простой) способ проверить наличие функции, доступной через $ FPATH?
  • Синтаксис расширения Zsh
  • Как скрипт zsh проверяет, является ли он источником?
  • Функции digest НЕ обрабатываются так же, как каталог файлов функций!
  • изменение разделов слова zsh
  • Interesting Posts

    SSH-туннель между несколькими хостами

    RHEL 6.4: Openssl 1.0.0-27 libcrypto и libssl отсутствуют

    чтение автономного архива Maildir с графическим почтовым клиентом

    Форматировать пакеты по вертикали в pacman

    Я хочу запускать команды, такие как make, make install, установка установки python без изменения каталогов

    Какие платформы часто используют Linux, помимо x86?

    RTL8139 не обнаружен на openSUSE 11.3 – может ли установить openSUSE 11.0 на помощь VirtualBox?

    Отклонить пакеты в pf после того, как соединение потребляет определенное количество трафика

    Как открыть все файлы в текущем каталоге и во всех подкаталогах с помощью vim?

    Как добавить репозиторий из оболочки в Debian?

    DVD, приводящий к непоследовательности

    Как переместить полосу прокрутки влево в терминале gnome?

    Как определить, что вызывает записи в «последнем» выпуске cmd?

    Программа сценария оболочки Bash, которая запрашивает и читает два целых числа от пользователя.

    Изменение цвета текста Nemo с использованием темы GTK 3.20+

    Linux и Unix - лучшая ОС в мире.