我编写了以下 bash 脚本:
if [ "crack" == "crack" -a "something/play" == *"play"* ];
then
echo "Passed"
else
echo "Failed"
fi
但是,这种比较的右侧不起作用。我注意到如果我使用它,它唯一的右侧[[ "something/play" == *"play"* ]]
可以正常工作,但是如何在 if 子句中结合这两个条件。
[
这是和之间的区别[[
。第一个是标准命令,=
只测试相等性。(请注意,标准运算符是=
,而不是==
。)后者是 ksh 的一项功能,在 Bash 和 Zsh 中受支持,并且, /=
是==
模式匹配。此外,您应该避免使用-a
within [ .. ]
,如果您执行类似[ "$a" = foo -a "$b" = bar ]
and $a
or$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