$* 在 shell 中是什么意思

Zhe*_*Hao 8 shell shell-script

$*在shell中是什么意思?

我有两个函数的代码,run_command并且run_test,它们是这样调用的:

if [ -n "`echo ${GOAT_COMMANDS} | grep $1`" ]; then
  run_command $*
else
  run_test $*
fi
Run Code Online (Sandbox Code Playgroud)

我想了解是什么$*意思,但 Google 搜索对于搜索此类内容非常不利。

Mic*_*mer 14

$*是脚本或函数的所有参数,在空格上拆分为单独的参数。

如果你有一个功能:

foo() {
    for x in $*
    do
        echo $x
    done
}
Run Code Online (Sandbox Code Playgroud)

然后运行foo 1 "2 3 4" 5会输出:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

也就是说,带引号的字符串"2 3 4"将被拆分为三个单独的“单词”。

当你希望分裂参数到这样的单独的单词,你可以使用$@。如果使用相同的函数"$@"代替$*,它将输出:

1
2 3 4
5
Run Code Online (Sandbox Code Playgroud)

也就是说,引用的字符串不会被拆分为单独的单词。这就好比明确列出所有的位置参数出来:"$1" "$2" "$3" "$4" ...。一般而言,这可能是您想要使用的一种 - 分词通常会导致难以追踪的令人讨厌的错误。

在脚本的顶层(不在函数内部),这些是指给脚本本身的参数。

您的示例正在调用run_commandrun_test使用此脚本或函数的所有参数,拆分为单独的单词。如果脚本按原样运行,script.sh "hello world" 2 3它将具有运行的效果:

run_command hello world 2 3
Run Code Online (Sandbox Code Playgroud)