2011-01-28 134 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