2011-01-28 130 views
3

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

因此,我的脚本的第一部分catmewcme都设置为truefalse。这部分工作正常,因为我试过echo他们,他们产生了预期的结果。后来,我有这样的代码:

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

我再重复这与wcme。但是,意外的是,不管wcmecatme是什么,我的if语句中的命令都会执行。

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

回答

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 
$ 
+0

这个工作的感谢!将在4分钟内接受:) – Fred 2011-01-28 03:30:00

0

尝试[[ $catme == true ]]来代替。

或者更好的是,gahooa的答案相当不错。

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