我知道$@
和$*
都包含传递给bash函数的所有参数,并且它们几乎相同。我也知道"$@"
分别引用每个输入,而"$*"
引用整个内容。我正试图了解他们为何如此行事。
$ *很容易理解。它只是一个变量,其中包含每个输入和一个空格。但是,$ @到底是什么?它的行为不像常规变量,因为用引号引起的并不能引述整件事。它也不像数组变量那样工作,因为数组变量默认仅作为第一个参数。即使将其分配给其他变量也会破坏工作。例如,
function foo() {
echo "$@"
}
function bar() {
local a="$@"
echo "$a"
}
foo abc 'def ghi'
bar abc 'def ghi'
等同于
echo abc 'def ghi'
echo 'abc def ghi'
为什么? $ @只是一种特殊情况吗?甚至可以将其分配给变量吗?