[英]What does “$*” at the end of a shell command mean
在示例shell脚本中,命令是 -
. <sourced_file.sh> $*
$*
是什么意思? 谢谢。
$*
扩展到给出它出现的脚本的所有参数,或者扩展到当前shell函数(如果它出现在函数内)。
但它通常是不正确的用法,因为它会将包含空格的参数分解为多个参数。 更正确的是"$@"
,即使它们中包含空格,也会保留原始参数。
$*
是一个变量,包含从1开始的所有位置参数(当前shell脚本的参数)
男子1猛击 :
shell专门处理几个参数。 这些参数只能被引用; 不允许分配给他们。
*
从1开始扩展到位置参数。 当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。 也就是说,“$ *”相当于“$ 1c $ 2c ...”,其中c是IFS变量值的第一个字符。 如果未设置IFS,则参数由空格分隔。 如果IFS为null,则连接参数时不会插入分隔符。
@
从1开始扩展到位置参数。 当扩展发生在双引号内时,每个参数都会扩展为单独的单词。 也就是说,“$ @”相当于“$ 1”“$ 2”...如果双引号扩展发生在一个单词中,则第一个参数的扩展与原始单词的开头部分连接,并且扩展最后一个参数与原始单词的最后一部分连接在一起。 当没有位置参数时,“$ @”和$ @扩展为空(即,它们被删除)。
通常你想使用"$@"
:
“$ *”相当于“$ 1 $ 2 ......”而
“$ @”相当于“$ 1”“$ 2”......
$*
是给当前脚本的所有参数的别名。
例如,如果您启动:
./test_script.sh arg1 arg2 arg3
如果你在arg1 arg2 arg3
echo $*
,你将显示: arg1 arg2 arg3
Google on 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.