【问题标题】:What is difference between `$*` an `$@` in Bash [duplicate]Bash中的`$*`和`$@`有什么区别[重复]
【发布时间】:2015-08-26 17:27:25
【问题描述】:

当我想要bash函数的所有参数时,我总是使用$@,但最近我发现$*也可以以同样的方式工作,它也可以用作数组索引。

我的问题是 Bash 中的 $*$@ 有什么区别?我应该更喜欢哪一个?

【问题讨论】:

标签: arrays bash parameters


【解决方案1】:

Bash manual 对这个话题很清楚:

  • $*

    所有位置参数,被视为一个单词。

    注意:$* 必须被引用。

  • $@

    $*相同,但每个参数都是一个带引号的字符串,即参数原封不动地传递,没有解释或扩展。这意味着,除其他外,参数列表中的每个参数都被视为一个单独的词。

    注意:当然,$@ 应该被引用。

【讨论】:

  • $1, $2 ...怎么样?我也应该引用它们吗?
  • @terces907 理想情况下,是的。但是,如果您确定每个参数不包含 IFS 中的字符,则不需要。作为旁注 echo $*echo $@ 没有任何引号是等效的
  • @terces907 通常,您应该在 bash 中引用 everything ,除非您知道自己在做什么。在大多数情况下,未嵌入双引号的变量或反引号将具有不需要的“特征”。
【解决方案2】:

这里有一个历史发展。发现$*不够用,所以引入$@来代替。仍有$* 有用的情况;但除非你特别想分解引用的标记,否则你应该避免它。

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 2021-12-17
    • 2011-03-26
    • 2012-02-11
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多