我从How can I run a function from a script in command line?
找到了以下的bash脚本片段$ cat test.sh
testA() {
echo "TEST A $1";
}
testB() {
echo "TEST B $2";
}
"$@"
这很有效。
答案的回答之一是Use "$@" in most cases. $@ is not safe in some cases
我想知道为什么$@
在最后一行需要引号"$@"
。
bash脚本中$@
周围有或没有引号的区别是什么?
答案 0 :(得分:0)
"$@"
引用每个扩展的位置参数。例如:
# script.sh
cat "$@"
cat $@
如果您执行script "a b"
,则第一个cat
会尝试发出名为a b
的文件。由于第二个cat
未引用位置参数,因此会尝试发出名为a
和b
的单个文件。这可能会导致各种问题,因为用户引用了传递给script
的值并期望将其作为一个单词/单元处理。
请注意,"$@"
有点特殊,因为如果您执行script "a b" "c d"
,则会在脚本中扩展为:cat "a b" "c d"
而不是cat "a b c d"
。第二行会cat a b c d
尝试连接四个不同的文件而不是两个名称中带空格的文件。