0

我编写了以下 bash 脚本:

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

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

4

2 回答 2

2

[这是和之间的区别[[。第一个是标准命令,=只测试相等性。(请注意,标准运算符是=,而不是==。)后者是 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 ((? .

于 2021-03-03T13:19:43.587 回答
1

如果您使用双括号,您可以将条件与&&(and) 和||(or) 链接起来。

if [[ "crack" == "crack" && "something/play" == *"play"* ]]
then
     echo "Passed"
else
     echo "Failed"
fi
于 2021-03-03T13:20:12.940 回答