shell命令末尾的“$ *”是什么意思

在示例shell脚本中,该命令是 –

. <sourced_file.sh> $* 

$*是什么意思? 谢谢。

$*展开给出现在其中的脚本的所有参数,或者扩展到当前shell函数出现在函数内部的参数。

这通常是不正确的,因为它将包含空格的参数分解为多个参数。 更正确的是"$@" ,它保留了原始参数,即使它们中有空格也是如此。

$*是一个变量,它包含从1开始的所有位置参数(当前shell脚本的参数)

男子1 bash :

shell专门处理几个参数。 这些参数只能被引用; 不允许分配给他们。

*

从一个开始扩展到位置参数。 当扩展出现在双引号内时,扩展为单个字,每个参数的值由IFS特殊变量的第一个字符分隔。 也就是说,“$ *”相当于“$ 1c $ 2c …”,其中c是IFS变量值的第一个字符。 如果IFS未设置,则参数由空格分隔。 如果IFS为空,则参数在不插入分隔符的情况下进行连接。

@

从一个开始扩展到位置参数。 当扩展出现在双引号内时,每个参数将扩展为一个单独的单词。 也就是说,“$ @”相当于“$ 1”“$ 2”…如果双引号扩展出现在一个单词内,则第一个参数的扩展与原始单词的开头部分相连,最后一个参数的最后一部分与原始单词连接。 当没有位置参数时,“$ @”和$ @展开为空(即,它们被移除)。

通常你想使用"$@"

“$ *”相当于“$ 1 $ 2 …”,而
“$ @”相当于“$ 1”“$ 2”…

$*是给予当前脚本的所有参数的别名。

例如,如果您启动:

 ./test_script.sh arg1 arg2 arg3 

如果您在arg1 arg2 arg3显示echo $* ,将显示: arg1 arg2 arg3

谷歌bash $* 立即给你的高级bash脚本指南给你答案。 你经常更喜欢"$@"

$ *是参数

所以,如果你脚本“foo.sh”是

 #!/bin/sh gethostip $* 

你可以调用foo.sh -d localhost

这将是一样的

 gethostip -d localhost 

Minbd虽然,$ *将不会发挥有争议的空间。

这是“所有的论点”:

 $ cat >test<<EOF > echo \$* > EOF $ bash test foo bar foo bar