【发布时间】:2015-08-26 17:27:25
【问题描述】:
当我想要bash函数的所有参数时,我总是使用$@,但最近我发现$*也可以以同样的方式工作,它也可以用作数组索引。
我的问题是 Bash 中的 $* 和 $@ 有什么区别?我应该更喜欢哪一个?
【问题讨论】:
-
要查看差异,请尝试使用包含空格的参数,例如:
myscript.sh "a b c" d。
标签: arrays bash parameters
当我想要bash函数的所有参数时,我总是使用$@,但最近我发现$*也可以以同样的方式工作,它也可以用作数组索引。
我的问题是 Bash 中的 $* 和 $@ 有什么区别?我应该更喜欢哪一个?
【问题讨论】:
myscript.sh "a b c" d。
标签: arrays bash parameters
Bash manual 对这个话题很清楚:
$*所有位置参数,被视为一个单词。
注意:
$*必须被引用。
$@与
$*相同,但每个参数都是一个带引号的字符串,即参数原封不动地传递,没有解释或扩展。这意味着,除其他外,参数列表中的每个参数都被视为一个单独的词。注意:当然,
$@应该被引用。
【讨论】:
$1, $2 ...怎么样?我也应该引用它们吗?
echo $* 和 echo $@ 没有任何引号是等效的
这里有一个历史发展。发现$*不够用,所以引入$@来代替。仍有$* 有用的情况;但除非你特别想分解引用的标记,否则你应该避免它。
【讨论】: