$@ 作为 bash 脚本函数参数是什么意思

Dav*_*ave 20 bash shell

$@作为 bash 脚本函数参数是什么意思?

例子:

function foo()
{
    echo "$@" 1>&2;
}
Run Code Online (Sandbox Code Playgroud)

小智 26

$@变量扩展为调用函数时使用的所有参数,因此

function foo()
{
    echo "$@"
}

foo 1 2 3
Run Code Online (Sandbox Code Playgroud)

会显示1 2 3. 如果不在函数内部使用,则指定调用脚本时使用的所有参数。有关更多信息,请参阅bash 手册页


rou*_*ble 16

$@ 是 bash 中的两个“位置参数”表示之一,另一个是 $*。

$@ 和 $* 都是内部 bash 变量,表示传递给函数或脚本的所有参数,有一个关键区别,$@ 将每个参数作为单独的带引号的字符串,而 $* 将所有参数作为单个字符串。下面的代码显示了这种差异:

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c
Run Code Online (Sandbox Code Playgroud)

输出:

Using $@
a
b
c
Using $*
a b c
Run Code Online (Sandbox Code Playgroud)

注意,当用 $* 调用时,只有一个参数被传递给 foo(),但使用 $@ 三个参数被传递给 foo()。

更多信息:http : //tldp.org/LDP/abs/html/internalvariables.html#APPREF