关于shell:KornShell布尔条件逻辑

KornShell Boolean Conditional Logic

我有点困惑于我正在写的这个kornshell(ksh)脚本,主要是布尔值和条件值。

所以在我的脚本的第一部分,我把catmewcme都设置为truefalse。这部分工作得很好,因为我试过用它们,它们产生了预期的结果。稍后,我会得到以下代码:

1
2
3
if [[ $catme ]] ; then
    some commands
fi

我跟wcme重复这个。然而,出乎意料的是,无论wcmecatme是什么,我的if语句中的命令都会被执行。

这是语法错误吗?我试过[[ $catme -eq true ]],但似乎也不管用。有人能给我指个方向吗?


test[是一样的。您需要从if语句中去掉test命令,因此它看起来如下:

1
2
3
if $catme; then
    some commands
fi

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
$ v=true  
$ $v
$ if $v; then
>   echo"PRINTED"
> fi
PRINTED

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


您也可以尝试试用和错误方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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


改为试试[[ $catme == true ]]

或者更好的是,gahooa的回答很好。