2011-11-01 147 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