【问题标题】:what does $* mean in a shell script$* 在 shell 脚本中是什么意思
【发布时间】:2012-09-13 19:57:21
【问题描述】:

$* 在 shell 脚本中的确切含义是什么?

例如考虑下面的代码sn-p

$JAVA_HOME/bin/java/com/test/Testclass $*

【问题讨论】:

标签: linux bash shell unix special-characters


【解决方案1】:

表示传递给脚本或函数的所有参数,按单词分割。

通常是错误的,应该替换为"$@",这样可以正确分隔参数。

【讨论】:

  • 好吧,@ДМИТРИЙ МАЛИКОВ (Dmitri?) 已经解释了 $* 最初是如何构造为单个字符串的。这里重要的是它随后会受到 shell 的正常分词,*除非*它被引用。 "$*" 将确保参数仍然作为一个单独的长字符串处理。 "$@" 强制将参数列表作为带引号的字符串数组处理。各有各的用途,了解其中的区别很重要。
【解决方案2】:

自己很容易找到答案:man bash/\$\*

特殊参数

shell 专门处理几个参数。这些参数只能被引用;不允许分配给他们。

  • 从一开始扩展到位置参数。当扩展出现在双引号内时,它会扩展为单个单词,每个参数的值由 IFS 特殊变量的第一个字符分隔。即"$*" 等价于"$1c$2c...",其中cIFS 变量值的第一个字符。如果 IFS 未设置,则参数以空格分隔。如果 IFS 为 null,则将参数连接起来而不插入分隔符。

【讨论】:

    【解决方案3】:

    $* 扩展为传递给该 shell 脚本的所有参数。

    $0 = shell 脚本的名称

    $1 = 第一个参数

    $2 = 第二个参数 ...等

    $# = 传递给 shellscript 的参数数量

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 2017-06-22
      • 2010-12-25
      • 1970-01-01
      • 2017-04-17
      • 2013-12-03
      • 2013-04-08
      • 2014-06-22
      相关资源
      最近更新 更多