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