如果 BASH 变量为空/未分配/错误,如何为其赋值?

如果 BASH 变量为空/未分配/错误,如何为其赋值?

我正在寻找与此 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 没有任何特殊值TrueFalse,因此唯一的“假”值为 0。然后,可以将变量设置为空字符串,也可以取消设置。

  1. 如果尚未设置变量,或者设置为 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!
    
  2. 如果变量的当前值为 false ( 0),则设置该变量:

     $ foo=0
     $ (($foo)) ||  foo="I must have been unset, empty, or null!"
     $ echo "$foo"
     I must have been unset, empty, or null!
    

相关内容