Відповіді:
У $@
змінному розкриватися для всіх параметрів , використовуваних при виконанні функції, так
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
$1
і$2
т.д. в будь-якому випадку, незалежно від$@
.