繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM