提问人:LostHat 提问时间:1/4/2023 更新时间:1/4/2023 访问量:187
为什么双方括号在带有 grep 的 if 语句中不起作用?[复制]
Why double square brackets don't work in if statement with grep? [duplicate]
问:
有人可以解释为什么当 if 语句在双方括号中时,这个 bash 脚本不起作用,而没有任何括号呢?
if [[ echo "word1word2" | grep -Eiq 'word1|word2' && echo "word3" | grep -Eiq 'word3' ]]
then
echo "proceed"
else
echo "don't proceed"
fi
答:
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
添加了使用方式[[
评论
[[
是一个命令,而不是分组语法。里面的表达式不是任意的 shell 管道。[[ ... ]]
[[ ]]
ls -lt foo
ls
[[ ls -lt foo ]]
$ls
$foo