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

16

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

Пример:

function foo()
{
    echo "$@" 1>&2;
}
Дейв
источник

Ответы:

20

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

function foo()
{
    echo "$@"
}

foo 1 2 3

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

BRM
источник
11

$ @ - это одно из двух представлений «позиционных параметров» в 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

Дейв
источник
2
Нет, это внутренняя переменная, означающая все параметры, переданные функции. Они доступны как $1и $2т. Д., Независимо от $@.
тердон