14

Что означает $@ как параметр функции bash-скрипта?

Пример:

function foo()
{
    echo "$@" 1>&2;
}

3 ответа3

18

Переменная $@ распространяется на все параметры, используемые при вызове функции, поэтому

function foo()
{
    echo "$@"
}

foo 1 2 3

будет отображать 1 2 3 . Если не используется внутри функции, он указывает все параметры, используемые при вызове скрипта. Смотрите страницу руководства bash для получения дополнительной информации.

9

$ @ - это одно из двух представлений "позиционных параметров" в bash, другое - $ *.

И $ @, и $ * являются внутренними переменными bash, которые представляют все параметры, передаваемые в функцию или скрипт, с одним ключевым отличием, $ @ имеет каждый параметр как отдельную строку в кавычках, тогда как $ * имеет все параметры как одну строку. Эта разница показана в следующем коде:

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c

Выход:

Using $@
a
b
c
Using $*
a b c

Обратите внимание, что при вызове с помощью $ * ровно один аргумент передается в foo(), а при $ @ три аргумента передаются в foo().

Дополнительная информация: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF.

0

Я ожидаю, что это означает, что взять в качестве хэша все входные параметры. Поэтому, если есть 3 входных параметра, они будут доступны в функции в виде $ 1, $ 2, $ 3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .