我无法让grep在if语句中正常工作.在下面的代码段中,if-check始终为true(即找不到单词),程序打印NOT FOUND,即使单词已经在〜/ .memory中.
for (( i=0; i<${#aspellwords[*]}; i++)); do
if [ !$(grep -q "${aspellwords[$i]}" ~/.memory) ]; then
words[$i]="${aspellwords[$i]}"
printf "\nNOT FOUND\n"
fi
done
但是,当我测试以下代码代替上一段时:
for (( i=0; i<${#aspellwords[*]}; i++)); do
if grep -q "${aspellwords[$i]}" ~/.memory; then echo FOUND IT; fi
done
它工作得很好,找到没有任何问题的单词.
那么第一段代码有什么问题?
解决方法:
第一个片段有很多问题.
[]不是if语法的一部分(正如您从第二个片段中看到的那样).
[是系统上内置的shell和二进制文件.它只是退出返回代码.如果…;然后测试….的返回码
$()是命令替换.它将替换为运行的命令的输出.
所以[!$(grep …)]实际上正在评估[!output_from_grep],[word]被解释为[-n word],只要word为非空,它就为真.鉴于 !永远不会是非空的永远是真的.
简单地说,正如@thom在他的评论中指出的那样(有点倾斜),加上!否定你的第二个片段,它与grep之间有一个空格.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。