假设我有一些命令:
somecommand "$@"
$@ 的意义何在?这肯定是一些我不熟悉的 unix 技巧。不幸的是,由于它全是标点符号,我也无法用 Google 搜索它。
答案1
它是当前 shell 脚本或函数的参数,单独引用。
man bash
说:
@
扩展为位置参数,从 1 开始。当扩展发生在双引号内时,每个参数都会扩展为一个单独的单词。也就是说,"$@"
相当于"$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