bash中的多个if条件不工作



我编写了以下bash脚本:

if [ "crack" == "crack" -a "something/play" == *"play"* ];
then
echo "Passed"
else
echo "Failed"
fi

然而,右边的比较不起作用。我注意到,如果我在[[ "something/play" == *"play"* ]]的唯一右侧使用它,它可以正常工作,但我如何在if子句中组合这两个条件。

这是[[[的区别。第一个是一个标准命令,其中=只是测试是否相等。(注意,标准操作符是=,而不是==。)后者是ksh的一个特性,在Bash和Zsh中得到支持,其中=/==是一个模式匹配。此外,您应该避免在[ .. ]中使用-a,如果您做类似[ "$a" = foo -a "$b" = bar ]$a$b包含!的事情,它可能会中断。

$ if [[ "crack" == "crack" && "something/play" == *"play"* ]]; then echo true; fi
true

参见(在unix.SE中):为什么[是shell内置的,而[[是shell关键字?和Bash操作符[[vs [vs (vs (?) .

如果使用双括号,则可以将&&(and)和||(or)链接在一起。

if [[ "crack" == "crack" && "something/play" == *"play"* ]]
then
echo "Passed"
else
echo "Failed"
fi

最新更新