Скажем, у меня есть команда:
somecommand "$@"
Каково значение $ @? Это должно быть какая-то хитрость с Unix, с которой я не знаком. К сожалению, так как все это пунктуация, я тоже не могу гуглить.
Это параметры текущего сценария оболочки или функции, которые указаны в кавычках.
man bash
говорит:
@
Расширяется до позиционных параметров, начиная с единицы. Когда раскрытие происходит в двойных кавычках, каждый параметр раскрывается в отдельное слово. То есть"$@"
эквивалентно"$1" "$2" ...
Учитывая следующий скрипт:
#!/usr/bin/env bash
function all_args {
# repeat until there are no more arguments
while [ $# -gt 0 ] ; do
# print first argument to the function
echo $1
# remove first argument, shifting the others 1 position to the left
shift
done
}
echo "Quoted:"
all_args "$@"
echo "Unquoted:"
all_args $@
Это происходит при выполнении:
$ ./demo.sh foo bar "baz qux"
Quoted:
foo
bar
baz qux
Unquoted:
foo
bar
baz
qux