KornShell布尔条件逻辑

时间:2011-01-28 03:19:06

标签: shell unix scripting ksh

我对我写的这个KornShell(ksh)脚本有点困惑,主要是用布尔值和条件语。

因此,我的脚本的第一部分catmewcme都设置为truefalse。这部分工作正常,因为我已经尝试echo他们并且他们产生了预期的结果。稍后,我有这段代码:

if [[ $catme ]] ; then
    some commands
fi

我用wcme重复一遍。但是,出乎意料的是,无论wcmecatme是什么,我的if语句中的命令都会被执行。

这是语法错误吗?我试过[[ $catme -eq true ]],但似乎也没有用。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:8)

test[是一回事。你需要从if语句中删除test命令,所以它看起来像这样:

if $catme; then
    some commands
fi

输入man test以获取更多信息。

例如:

$ v=true  
$ $v
$ if $v; then
>   echo "PRINTED"
> fi
PRINTED

$ v=false
$ if $v; then
>   echo "PRINTED"
> fi
$ 

答案 1 :(得分:3)

您也可以尝试试错法:

if [[ true ]]; then echo +true; else echo -false; fi
+true
if [[ false ]]; then echo +true; else echo -false; fi
+true
if [[ 0 ]]; then echo +true; else echo -false; fi
+true
if [[ -1 ]]; then echo +true; else echo -false; fi
+true
if (( -1 )); then echo +true; else echo -false; fi
+true
if (( 0 )); then echo +true; else echo -false; fi
-false
if (( 1 )); then echo +true; else echo -false; fi
+true
if [[ true == false ]]; then echo +true; else echo -false; fi
-false
if [[ true == true ]]; then echo +true; else echo -false; fi
+true
if true; then echo +true; else echo -false; fi
+true
if false; then echo +true; else echo -false; fi
-false

答案 2 :(得分:0)

请尝试[[ $catme == true ]]

或者更好的是,gahooa的答案非常好。