![如果 BASH 变量为空/未分配/错误,如何为其赋值?](https://linux22.com/image/175826/%E5%A6%82%E6%9E%9C%20BASH%20%E5%8F%98%E9%87%8F%E4%B8%BA%E7%A9%BA%2F%E6%9C%AA%E5%88%86%E9%85%8D%2F%E9%94%99%E8%AF%AF%EF%BC%8C%E5%A6%82%E4%BD%95%E4%B8%BA%E5%85%B6%E8%B5%8B%E5%80%BC%EF%BC%9F%20.png)
我正在寻找与此 JS 作业等效的内容:
FOO = FOO || "I must have been falsey!";
答案1
任一这些扩展可能是您正在寻找的内容,具体取决于您想要完成作业的具体时间:
省略冒号会导致仅测试未设置的参数。 [...]
${parameter:-word}
如果参数未设置或为空,则替换单词的扩展。否则,将替换参数的值。
${parameter:=word}
如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。
如果您只想在第一次使用时设置默认值,那么:
some-command "${FOO:=default value}"
other-command "$FOO" # both use "default value" if FOO was null/unset
如果你想明确说明这一点:
FOO="${FOO:-default value}"
some-command "${FOO}"
答案2
这取决于你所说的“假”是什么意思。 Bash 没有任何特殊值True
或False
,因此唯一的“假”值为 0。然后,可以将变量设置为空字符串,也可以取消设置。
如果尚未设置变量,或者设置为 NULL (
\0
) 或空字符串,则设置该变量:## unset variable $ foo=${foo:="I must have been unset empty or null!"} $ echo "$foo" I must have been unset, empty, or null! $ foo="" ## set to the empty string $ foo=${foo:="I must have been unset, empty, or null!"} $ echo "$foo" I must have been unset, empty, or null!
如果变量的当前值为 false (
0
),则设置该变量:$ foo=0 $ (($foo)) || foo="I must have been unset, empty, or null!" $ echo "$foo" I must have been unset, empty, or null!