【问题标题】:What does ${1+"$@"} mean in a unix shell script? [duplicate]${1+"$@"} 在 unix shell 脚本中是什么意思? [复制]
【发布时间】:2015-07-14 22:07:38
【问题描述】:

我在查看一些较旧的 unix shell 脚本时遇到了这个结构,它是什么意思,为什么使用它?

${1+"$@"}

【问题讨论】:

  • 文档是怎么说的?
  • Shell Parameter Expansion 很容易错过的重要句子:“省略冒号会导致仅对未设置的参数进行测试。”
  • 谢谢!我发现很难用这样的结构搜索谷歌(甚至是 stackoverflow)。

标签: sh


【解决方案1】:

我从 unix haters handbook,文本的第 152 页(pdf 的第 190 页)中找到了这个解释。 http://web.mit.edu/~simsong/www/ugh.pdf

这是在 /bin/sh shell 家族的 shell 脚本。

它说,“如果至少有一个参数 ( ${1+ ),则替换为 所有参数(“$@”)在每个参数中保留所有空格等 论据。

如果我们只使用“$@”,那么它将替换为“”(一个空参数) 如果没有调用参数,但我们不希望在 这种情况,不是“”。

为什么不使用“$*”等?来自 sh(1) 手册页:

在一对双引号(“”)内,参数和 发生命令替换,shell 将结果引用到 避免空白解释和文件名生成。如果 $* 是 在一对双引号内,位置参数是 替换和引用,由带引号的空格分隔(“$1 2美元……”);但是,如果 $@ 在一对双引号内,则 位置参数被替换和引用,由 不带引号的空格(“$1” “$2” ...)。

我认为 ${1+“$@”} 可以一直移植到“版本 7 Unix”。

哇!一直回到第 7 版。

【讨论】:

    【解决方案2】:

    Google 应该是您最好的朋友!这是差不多 2 年前提出的类似问题。

    https://unix.stackexchange.com/questions/68484/what-does-1-mean-in-a-shell-script-and-how-does-it-differ-from

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2015-05-29
      • 2017-04-17
      • 2014-12-01
      • 2011-11-14
      • 2017-08-15
      • 2018-10-24
      • 2012-04-19
      • 2018-05-11
      相关资源
      最近更新 更多