2011-11-01 113 views
2

我有一個基本的bash腳本問題。該腳本的輸出,我預計:bash腳本基本字符串比較

一個 Ÿ b X Ç Ÿ

,而是,我得到:

一個 X b X Ç x

#!/bin/bash                  
for foo in 'a' 'b' 'c'; do 
    echo $foo;           
    if [ "$foo"=="b" ]; then                   
     echo x;                 
    else                   
     echo y;                 
    fi                                       
done;  

我是什麼mi ssing?

+2

嘖,去容易對空白... – Blender

+0

確定。我想到了。操作員之間有空間有所不同。哎呀。 –

回答

2

您需要在==運算符周圍添加空格,否則將被解析爲單個令牌a==b(在第一次迭代的擴展之後)。這會傳遞給內建的test(其中[是另一個名稱)。由於單個參數a==b是非空字符串原子,因此它會成功並退出,狀態爲0,並且分支將被執行。

+0

實際上,它成功並執行'then'分支。只有一個參數,如果參數非空,則'test'返回true,並且'a == b'是一個非空字符串。 –

+0

@glenn:哎呀,你是對的。 –

3

試試這個腳本:

#!/bin/bash 

for foo in 'a' 'b' 'c'; do 
    echo "$foo"; 

    if [ "$foo" = 'b' ]; then 
    echo 'x'; 
    else 
    echo 'y'; 
    fi 
done; 

您在bash使用=字符串比較。另外,請引用您的echo'd字符串。

0

看看以下內容:

#!/bin/bash 

for foo in 'a' 'b' 'c'; do 

    echo $foo; 

    if [ $foo == "b" ]; then  # Make a note of the spaces 
     echo "x"; 
    else 
     echo "y"; 
    fi 
done; 

問候,

羅漢Dsouza