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