参数扩展默认值“:=” vs“ =” vs“:-” vs“-”

时间:2020-07-01 18:01:00

标签: bash shell parameter-expansion

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

3 个答案:

答案 0 :(得分:2)

:=:-的演示:

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

:-仅影响扩展结果,而参数保持不变。 :=实际上将默认值分配给,如果该参数为null或未设置。

关于未设置的参数,

=-类似;它只会更改foo的值(如果未设置),如果其值为空,则不会更改。

答案 1 :(得分:0)

该文档是明确的。

通过=表单,添加了重点:

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

其他形式:

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

没有赋值,它在以后扩展为变量时修改参数的值,而无需使用=表格。

答案 2 :(得分:0)

即使问题已经回答,我也只想发布一个指向shell bible的链接,您不仅可以找到关于参数扩展的绝妙解释,而且还可以找到几乎所有与shell相关的解释。