【问题标题】:bash scripting basic string comparisonbash 脚本基本字符串比较
【发布时间】:2011-12-19 18:02:17
【问题描述】:

我有一个基本的 bash 脚本问题。这个脚本的输出,我预计是:

一个 是的 b X C 是的

但相反,我得到:

一个 X b X C x

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

我错过了什么?

【问题讨论】:

  • Sheesh,在那个空白处放轻松...
  • 好的。我想到了。运算符之间有空格会有所不同。啊。

标签: string bash scripting comparison


【解决方案1】:

看看以下内容:

#!/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;

问候,

罗汉·杜萨

【讨论】:

    【解决方案2】:

    您需要在== 运算符周围添加空格,否则它会被解析为单个标记a==b(扩展后,用于第一次迭代)。这将传递给 test 内置函数([ 是一个替代名称)。由于单个参数a==b 是一个非空字符串原子,它成功并以状态0 退出,并执行then 分支。

    【讨论】:

    • 其实成功了,执行then分支。对于单个参数,如果参数为非空,test 返回 true,而 a==b 是非空字符串。
    【解决方案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 字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 2015-08-30
      相关资源
      最近更新 更多