zsh:bash脚本比较动态生成的字符串

时间:2013-04-21 09:23:51

标签: bash zsh

这可以按预期工作: -

x="None of the specified ports are installed"
if [ "$x" = "None of the specified ports are installed" ]; 
    then echo 1; 
    else echo 0; 
fi

我得到1,这正是我所期待的。

但这不起作用: -

y="`port installed abc`"
if [ "$y" = "None of the specified ports are installed" ]; 
    then echo 1; 
    else echo 0; 
fi

我得到0,这不是我所期待的;即使

echo $y 

给出None of the specified ports are installed.

这里的主要区别是$yport installed abc命令动态确定。但为什么这会影响我的比较呢?

2 个答案:

答案 0 :(得分:2)

请仔细注意。

None of the specified ports are installed

不等于

None of the specified ports are installed.
                                         ^
                                        /
                          right there -- 

另一个选择

y=$(port installed abc)
z='None of the specified ports are installed'
if [[ $y =~ $z ]]
then
  echo 1
else
  echo 0
fi

答案 1 :(得分:1)

一种替代方法,对错误的错误不太敏感,比如错过了“。”

y="`port installed abc`"
if [[ "$y" = *"None of the specified ports are installed"* ]]; 
    then echo 1; 
    else echo 0; 
fi

使用[[ ]]可以提供更强大的比较声明。

也代替使用

y="`port installed abc`"

最好写

y=$(port installed abc)

在bash irc频道上与其他开发者讨论的一些调查结果。