【问题标题】:What does ${MY_VAR:-1} mean in bash? [duplicate]${MY_VAR:-1} 在 bash 中是什么意思? [复制]
【发布时间】:2015-03-21 20:17:46
【问题描述】:

我在some documentation 中看到了这一点。但它似乎没有做任何事情......

~ $ echo $DYNO
run.9917
~ $ echo ${DYNO}
run.9917
~ $ echo ${DYNO:-1}
run.9917

:-1 有什么作用?

【问题讨论】:

标签: bash


【解决方案1】:

${DYNO:-1} 表示如果DYNO 存在且不为空,则返回其值;否则返回1。是变量名称和{} 中的默认值之间的:- 造成了这种情况。

【讨论】:

  • 注意:: 此处可选。这个${DYNO-1} 也可以。
  • @Зелёный 谢谢,不知道!刚刚试了一下,效果很好。
  • 不是所有的,但对于某些变量替换的情况,这是有效的。为你 +1。
  • @Зелёный 这并不完全正确。 :- 表示未定义且不为空,而- 表示未定义。看看grymoire.com/Unix/Sh.html#uh-32
  • @HuStmpHrrr 很有趣,所以我们得到了一些新的行为。我发现${var=val}${var+val}${var?message} 也是如此。
【解决方案2】:

Shell Parameter Section of the Bash Reference Manual 对此进行了介绍。

"${var:-1}" 表示如果定义了名为var 的参数,则展开,如果没有定义,则展开1

其他类似的扩展:

  • "${var: -1}" 表示将var 的子串从最后一个字符开始展开。
  • "${var:=1}" 表示将1 分配给var(如果未定义),然后,无论哪种方式,扩展参数。

例子:

$ x=hi y=
$ echo "${x:-1}" "${x: -1}" "${y:-2}"
hi i 2

【讨论】:

    【解决方案3】:

    ${var:-word} 如果var 为空或未设置,word 将替换varvar 的值不会改变。

    $> echo "${bar:-1}"
    $> 1
    $> bar=3
    $> echo "${bar:-1}"
    $> 3
    $> echo "${bar-1}"
    $> 3
    

    【讨论】:

    • 谢谢。要添加一些示例吗?
    • @JohnBachir。简而言之,${var:-word} 允许word 作为var默认值,以防var 未设置(1)(2) 空/空。还有其他变体可以改变将word 用作var 的值的情况。
    猜你喜欢
    • 2014-04-08
    • 2019-10-29
    • 2016-12-10
    • 2012-04-19
    • 2015-09-27
    • 2021-02-11
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多