这可以按预期工作: -
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.
这里的主要区别是$y
由port installed abc
命令动态确定。但为什么这会影响我的比较呢?
答案 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频道上与其他开发者讨论的一些调查结果。