如何在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
因为true
和false
是分别返回0
或1
命令, 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也没有分叉处理。