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_command或run_test使用此脚本或函数的所有参数,拆分为单独的单词。如果脚本按原样运行,script.sh "hello world" 2 3它将具有运行的效果:
run_command hello world 2 3
Run Code Online (Sandbox Code Playgroud)