在示例shell脚本中,命令为 -
. <sourced_file.sh> $*
$*
是什么意思?
感谢。
答案 0 :(得分:10)
$*
扩展到它出现的脚本的所有参数,或者扩展到当前shell函数(如果它出现在函数内)。
它通常是不正确的用法,因为它会将包含空格的参数分解为多个参数。更正确的是"$@"
,它保留了原始参数,即使它们中包含空格。
答案 1 :(得分:1)
$*
是一个变量,包含从1开始的所有位置参数(当前shell脚本的参数)
shell专门处理几个参数。这些参数可能 只被引用;不允许分配给他们。
*
从一个开始扩展到位置参数。当。。。的时候 扩展发生在双引号内,它扩展为单个单词 每个参数的值由第一个字符分隔 IFS特殊变量。也就是说,“$ *”相当于“$ 1c $ 2c ......”, 其中c是IFS变量值的第一个字符。如果 IFS未设置,参数由空格分隔。如果IFS为null, 参数连接时没有插入分隔符。
@
从一个开始扩展到位置参数。当。。。的时候 扩展发生在双引号内,每个参数扩展为a 单词。也就是说,“$ @”相当于“$ 1”“$ 2”......如果是 双语扩张发生在一个词内,扩展了 第一个参数与原始的开头部分连接在一起 单词,并将最后一个参数的扩展与最后一个参数连接起来 原始单词的一部分。没有位置参数时 “$ @”和$ @扩展为空(即,它们被移除)。
通常你想使用"$@"
:
“$ *”相当于“$ 1 $ 2 ...”而 “$ @”相当于“$ 1”“$ 2”......
答案 2 :(得分:1)
$*
是给当前脚本的所有参数的别名。
例如,如果您启动:
./test_script.sh arg1 arg2 arg3
如果您在test_script.sh中执行echo $*
,则会显示:arg1 arg2 arg3
答案 3 :(得分:1)
Google bash $*
为您提供 the advanced bash scripting guide,为您提供答案。您经常应该选择"$@"
答案 4 :(得分:0)
$ *是参数
因此,如果脚本“foo.sh”是
#!/bin/sh
gethostip $*
你打电话给foo.sh -d localhost
它与
相同gethostip -d localhost
Minbd虽然,$ *对于有空格的参数不会很好。
答案 5 :(得分:0)
这是“所有论据”:
$ cat >test<<EOF
> echo \$*
> EOF
$ bash test foo bar
foo bar