请问某人使用grep -q这个行为的原因好吗? 我有一个包含“pippo”字样的文件。
1)
if [[ $(cat file | grep pippo) ]]; then echo OK; else echo KO; fi
--> OK
2)
if cat file | grep -q pippo; then echo OK; else echo KO; fi
--> OK
3)
if [[ $(cat file | grep -q pippo) ]]; then echo OK; else echo KO; fi
--> KO
grep:的“-q”选项不会向标准输出写入任何内容。如果发现任何匹配,则立即退出零状态,即使检测到错误也是如此。 为什么第三次返回OK? 谢谢
答案 0 :(得分:0)
原因是:
if [[ '' ]]; then echo OK; else echo KO; fi
--> KO
第二个按预期工作,因为这是if
正在做的事情,而[[...]]
它没有说出这个命令是否成功'或者'如果此命令没有以错误退出'
因此[[
运算符将评估$(...)
的输出,而不是它的返回值。您可以查看
if [[ $(echo boo) == boo ]]; then echo ok; fi
--> ok
但您的grep -q
并未输出任何可能被评估的内容。
您可以阅读man bash
,特别是Compound commands
部分[[
解释CONDITIONAL EXPRESSIONS
运算符和[[
部分,它们将解释{{1}}内的评估内容。
答案 1 :(得分:0)
你得到一个零长度的字符串。
$ a=$(cat file | grep -q "pippo")
$ echo $a
$ if [[ $a ]]; then echo ok; else echo err; fi
err
grep -q
通常用于获取grep
命令的退出代码,而不是比较字符串。推荐用途是,
$ if grep -q "pippo" file; then echo ok; else err; fi
以上将对grep -q "pippo" file
进行真值评估。