【问题标题】:What does ${ARGUMENT+x} mean in Bash? [duplicate]${ARGUMENT+x} 在 Bash 中是什么意思? [复制]
【发布时间】:2017-10-23 14:33:20
【问题描述】:

我有一个使用以下语法的 bash 脚本:

if [ ! -z ${ARGUMENT+x} ]; then

参数名后面的“+x”语法是什么意思?

【问题讨论】:

  • @Benjamin W. 是的,这是同一个问题,但我没有找到它,因为它是用于“加冒号”的。那不是我的问题。我的问题是关于论点,而不是“加号”。
  • 这两个问题都是关于+的参数扩展; + 之后的内容并不重要,所以在我看来,它们是重复的。
  • 好的。但无论如何我没有找到那个问题,所以这意味着每个人都在用“+x”寻找“论据”永远不会找到那个问题,他们会找到我的问题。
  • 没关系 - 它现在是指向另一个问题的路标。
  • 使用[ ! -z "…" ] 是写[ -n "…" ] 的冗长而曲折/晦涩的方式。第一个检查不是零长度,但第二个也是如此,没有额外的运算符。

标签: bash


【解决方案1】:

表示如果设置了$ARGUMENT,则替换为字符串x

让我们在 shell 中尝试一下:

$ echo  ${ARGUMENT+x}

$ ARGUMENT=123
$ echo  ${ARGUMENT+x}
x

你也可以用这个表格写这个:

${ARGUMENT:+x}

它与:有特殊含义,它测试变量是否为空未设置

查看bash parameter expansion

【讨论】:

  • 非常详尽的答案。
  • 你也可以用这个表格写这个”,但是它做了一些不同的事情。
  • 是的,帖子已相应编辑
  • 这是完全错误的,如果设置了变量,它将被替换为x。参数扩展运算符- 会在未设置某些内容时插入一个值。
  • 帖子已相应编辑
【解决方案2】:

与其讨论语法,我将指出它试图做什么:它试图确定变量ARGUMENT 是否设置为任何值(空或非空)。在bash 4.3 或更高版本中,可以改用-v 运算符:

if [[ -v ARGUMENT ]]; then

【讨论】:

  • 嗯,好的,所以这是等价的。很高兴知道。实际上这是一个相当古老的脚本,但我不知道语法。
  • 单独来看,这些是等价的,但您可以在任何可以使用$var 的地方使用${var+x},因此它可以成为更复杂表达式的一部分,可能涉及多个变量等。
  • 注意这里的“现代bash”特指版本>=4.3
  • 是的,说“现代”而不是提供特定版本是一个愚蠢的想法。
猜你喜欢
  • 2018-08-02
  • 2012-04-19
  • 2021-02-11
  • 2017-02-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多