为什么双方括号在带有 grep 的 if 语句中不起作用?[复制]

Why double square brackets don't work in if statement with grep? [duplicate]

提问人:LostHat 提问时间:1/4/2023 更新时间:1/4/2023 访问量:187

问:

有人可以解释为什么当 if 语句在双方括号中时,这个 bash 脚本不起作用,而没有任何括号呢?

if [[ echo "word1word2" | grep -Eiq 'word1|word2' && echo "word3" | grep -Eiq 'word3' ]]
then
  echo "proceed"
else
  echo "don't proceed"
fi
bash if 语句 grep 和运算符

评论

1赞 chepner 1/4/2023
[[是一个命令,而不是分组语法。里面的表达式不是任意的 shell 管道。[[ ... ]]
0赞 Gordon Davisson 1/5/2023
里面的是一个条件表达式,而不是命令。 将运行带有参数“-lt”和“foo”的命令,同时将检查变量的值在数值上是否小于(“lt”)变量的值。这些是完全不同的东西。[[ ]]ls -lt fools[[ ls -lt foo ]]$ls$foo

答:

1赞 Gilles Quénot 1/4/2023 #1

您根本不需要测试操作员:

if echo "word1word2" | grep -Eiq 'word1|word2' &&
   echo "word3" | grep -Eiq 'word3'
then
  echo "proceed"
else
  echo "don't proceed"
fi

它使用布尔逻辑

如果要使用 ,则:[[

if [[ $(echo "word1word2" | grep -Ei 'word1|word2') && $(echo "word3" | grep -Ei 'word3') ]]
then
  echo "proceed"
else
  echo "don't proceed"
fi

评论

0赞 LostHat 1/4/2023
是的,我知道它们不是必需的,但我正在寻找一个解释为什么它不适用于双方括号,因为我不想学习这种行为。
0赞 Gilles Quénot 1/4/2023
添加了使用方式[[