【问题标题】:parameter expansion default ":=" vs "=" vs ":-" vs "-"参数扩展默认 ":=" vs "=" vs ":-" vs "-"
【发布时间】:2020-07-01 18:01:00
【问题描述】:

我已经看到在 Bourne 派生的 shell 的参数扩展中使用默认值的几种不同方法::==:--。我想知道它们有何不同。手册说-= 处理空值的方式与:-:= 不同。但据我所知,:= == :-= == -。这是真的吗?

【问题讨论】:

  • 手册描述了每个人的行为,但据我所知,:- 和 := 行为完全相同。我想确认一下是否真的如此。
  • 他们没有;等式实际上改变了参数的值是默认使用的。
  • 区别在于:=除了返回变量外,还给变量赋值了默认值。
  • 添加echo $my_var,你会看到不同。

标签: bash shell parameter-expansion


【解决方案1】:

:=:- 的演示:

 $ unset foo
 $ echo ${foo:-bar}
 bar
 $ echo foo
 
 $ echo ${foo:=bye}
 bye
 $ echo $foo
 bye

:- 只影响展开的结果,保持参数不变。 := 实际上将默认值 赋给 如果参数为 null 或未设置。

= 在未设置参数方面与- 的工作方式类似;它仅在未设置时更改foo 的值,而不是在它具有空值时更改。

【讨论】:

    【解决方案2】:

    文档是明确的。

    对于= 表单,添加了重点:

    如果 parameter 未设置或为空,单词的扩展被分配给 parameter 然后替换参数的值。 [...]

    与其他形式:

    如果参数未设置或为空,则替换单词的扩展。否则,参数的值被替换。

    没有赋值,在以后扩展为变量时修改参数的值,不使用= 表单。

    【讨论】:

      【解决方案3】:

      即使问题已经得到解答,我还是想发布一个指向shell bible 的链接,在这里您不仅可以找到参数扩展的很好解释,还可以找到几乎所有与 shell 相关的解释。

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 2013-08-21
        • 2021-10-27
        • 2021-09-02
        • 1970-01-01
        • 2015-05-08
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多