如何用更简洁优雅的语法在Bash中为变量赋值true或false?
Bash中更简洁的变量条件赋值方式
你原来的写法存在一个小问题:[[ $TEST="test" ]]里的=是赋值操作,会把TEST的值改成test,导致条件永远为真。正确的字符串比较应该用==(或单个=,但==表意更清晰),同时给变量加上双引号避免空格、空值引发的语法问题,修正后的基础写法如下:
TEST="test" if [[ "$TEST" == "test" ]] then VAR=true else VAR=false fi
下面是几种更简洁优雅的写法:
短路求值写法:利用Bash的
&&和||短路特性,一行完成赋值,无需子shell,执行效率更高:TEST="test" [[ "$TEST" == "test" ]] && VAR=true || VAR=false子shell三元风格写法:把条件判断与输出逻辑放在子shell中,直接将结果赋值给变量,写法更贴近传统编程语言的三元运算符:
TEST="test" VAR=$([[ "$TEST" == "test" ]] && echo true || echo false)数值场景补充写法:如果是数值比较场景,可借助Bash算术扩展实现,若需要
true/false字符串需额外转换:TEST=10 # 先得到1/0的数值结果,再转换为true/false $(( TEST == 10 )) && VAR=true || VAR=false
注意:当变量可能为空值时,务必给变量加上双引号,避免出现语法错误。
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

