bash脚本中的引号围绕$ @?

时间:2018-01-08 18:35:25

标签: bash

我从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脚本中$@周围有或没有引号的区别是什么?

1 个答案:

答案 0 :(得分:0)

"$@"引用每个扩展的位置参数。例如:

# script.sh
cat "$@"
cat $@

如果您执行script "a b",则第一个cat会尝试发出名为a b的文件。由于第二个cat未引用位置参数,因此会尝试发出名为ab的单个文件。这可能会导致各种问题,因为用户引用了传递给script的值并期望将其作为一个单词/单元处理。

请注意,"$@"有点特殊,因为如果您执行script "a b" "c d",则会在脚本中扩展为:cat "a b" "c d"而不是cat "a b c d"。第二行会cat a b c d尝试连接四个不同的文件而不是两个名称中带空格的文件。

相关问题