如何在bash中的if块中评估一个布尔variables?

我已经定义了以下variables:

myVar=true 

现在我想按照这个方法来运行一些东西:

 if [ myVar ] then echo "true" else echo "false" fi 

上面的代码确实有效,但如果我尝试设置

 myVar=false 

它仍然会输出真实的。 可能是什么问题?

编辑:我知道我可以做一些forms的东西

 if [ "$myVar" = "true" ]; then ... 

但它有点尴尬。

谢谢

bash不知道布尔variables,也不test (当你使用[ )时被调用的东西。

解决办法是:

 if $myVar ; then ... ; fi 

因为truefalse是分别返回01命令, if期望的话。

请注意,这些值是“交换”的。 if后面的命令必须在成功时返回0 ,而在大多数编程语言中, 0表示“false”。

安全警告 :这是可行的,因为BASH展开variables,然后尝试执行结果作为命令! 确保variables不能包含像rm -rf /

请注意, if $myVar; then ... ;fi if $myVar; then ... ;fi构造有一个安全问题,你可能想避免

 case $myvar in (true) echo "is true";; (false) echo "is false";; (rm -rf*) echo "I just dodged a bullet";; esac 

if [ "$myvar" = "true" ]对你来说显得很尴尬,你可能还想重新思考为什么。 这是一个shell的string比较,它可能为了获得退出状态而跳过一个进程。 叉是一个沉重而昂贵的操作,而string比较是廉价的。 考虑几个CPU周期与几千个。 我的case解决scheme也没有分叉处理。