以空合并方式设置 shell 变量

dev*_*os1 33 shell bash variable

我真的很喜欢“空合并”,您可以在其中将变量设置为事物列表中的第一个“非空”值。许多语言都支持这一点,例如:

C#:

String myStr = string1 ?? string2 ?? "default";
Run Code Online (Sandbox Code Playgroud)

JavaScript:

var myStr = string1 || string2 || "default";
Run Code Online (Sandbox Code Playgroud)

...等等。我只是好奇这是否可以在 Bash 中完成以设置变量?

伪:

MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 47

POSIX shell(所以包括bash)等价物是:

${FOO:-${BAR:-default}}
Run Code Online (Sandbox Code Playgroud)

另见:

${FOO-${BAR-default}}
Run Code Online (Sandbox Code Playgroud)

变量检查是否设置了变量,而不是它是否解析为空字符串(这在变量设置但为空的情况下有所不同)。


Ign*_*ams 10

不直接。

my_str="${var_name:-${another_var:-default}}"
Run Code Online (Sandbox Code Playgroud)