Что означает $@
как параметр функции bash-скрипта?
Пример:
function foo()
{
echo "$@" 1>&2;
}
Переменная $@
распространяется на все параметры, используемые при вызове функции, поэтому
function foo()
{
echo "$@"
}
foo 1 2 3
будет отображать 1 2 3
. Если не используется внутри функции, он указывает все параметры, используемые при вызове скрипта. Смотрите страницу руководства bash для получения дополнительной информации.
$ @ - это одно из двух представлений "позиционных параметров" в 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.
Я ожидаю, что это означает, что взять в качестве хэша все входные параметры. Поэтому, если есть 3 входных параметра, они будут доступны в функции в виде $ 1, $ 2, $ 3