bash中的“ $ @”到底是什么

时间:2019-06-13 02:37:49

标签: bash shell sh

我知道$@$*都包含传递给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'

为什么? $ @只是一种特殊情况吗?甚至可以将其分配给变量吗?

0 个答案:

没有答案