参数扩展默认 ":=" vs "=" vs ":-" vs "-"
parameter expansion default ":=" vs "=" vs ":-" vs "-"
我在 Bourne 派生的 shell 中看到了在参数扩展中使用默认值的几种不同方法::=
、=
、:-
和 -
。我想知道他们有什么不同。手册说 -
和 =
处理空值的方式与 :-
和 :=
不同。但据我所知,:=
== :-
和 =
== -
。这是真的吗?
:=
对比 :-
的演示:
$ unset foo
$ echo ${foo:-bar}
bar
$ echo foo
$ echo ${foo:=bye}
bye
$ echo $foo
bye
:-
只影响展开的结果,参数不变。 :=
实际上将默认值 分配给 如果参数为 null 或未设置。
=
的工作方式类似于 -
关于未设置的参数;如果未设置,它只会更改 foo
的值,如果它具有空值则不会。
文档是明确的。
用=
形式,重点补充:
If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted. [...]
与其他形式:
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
没有 赋值,修改参数的值,当稍后扩展为变量时,不使用 =
形式。
虽然问题已经回答了,但我只想post一个link到shell bible,那里不仅对参数展开有很好的解释,但几乎所有 shell 相关的东西。
我在 Bourne 派生的 shell 中看到了在参数扩展中使用默认值的几种不同方法::=
、=
、:-
和 -
。我想知道他们有什么不同。手册说 -
和 =
处理空值的方式与 :-
和 :=
不同。但据我所知,:=
== :-
和 =
== -
。这是真的吗?
:=
对比 :-
的演示:
$ unset foo
$ echo ${foo:-bar}
bar
$ echo foo
$ echo ${foo:=bye}
bye
$ echo $foo
bye
:-
只影响展开的结果,参数不变。 :=
实际上将默认值 分配给 如果参数为 null 或未设置。
=
的工作方式类似于 -
关于未设置的参数;如果未设置,它只会更改 foo
的值,如果它具有空值则不会。
文档是明确的。
用=
形式,重点补充:
If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted. [...]
与其他形式:
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
没有 赋值,修改参数的值,当稍后扩展为变量时,不使用 =
形式。
虽然问题已经回答了,但我只想post一个link到shell bible,那里不仅对参数展开有很好的解释,但几乎所有 shell 相关的东西。