我编写了以下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