我无法让grep在if语句中正常工作。 在下面的代码段中,if-check总是成立(即没有find该单词),并且程序打印NOT FOUND,即使这些单词已经在〜/ .memory中。
for (( i=0; i<${#aspellwords[*]}; i++)); do if [ !$(grep -q "${aspellwords[$i]}" ~/.memory) ]; then words[$i]="${aspellwords[$i]}" printf "nNOT FOUNDn" fi done
但是,当我testing下面的代码代替以前的段:
for (( i=0; i<${#aspellwords[*]}; i++)); do if grep -q "${aspellwords[$i]}" ~/.memory; then echo FOUND IT; fi done
它工作得很好,发现没有任何问题的话。
那么第一部分代码有什么问题呢?
在背景上运行heredoc格式的脚本?
用shell脚本杀死vim进程会留下.swp文件
在Linux中回收站脚本
当使用bash脚本ssh远程机器时找不到命令
有没有办法在手册页中寻找一个标志?
在shell中导出variables值
检查/ etc / hosts中是否存在IP
BASH:“出口k = 1”与“k = 1”之间的差异
Bash脚本继续关键字不断开循环迭代
如果你想测试返回码,你不想要[ ... ] 放下这些。
[]不是if语法的一部分(正如你可以从你的第二个片段中看到的那样)。
[是系统中内置的和二进制的shell。 它只是退出代码。 if ...; then if ...; then测试…的返回码。
$()是命令替换。 它将替换自己运行的命令的输出 。
所以[ !$(grep ...) ]实际上是对[ !output_from_grep ]求值, [ word ]被解释为[ -n word ] ,只要word非空,它就是true。 鉴于此! 从来不是非空的,永远是真的。
就像@thom在他的评论中(有点斜线)所表明的那样,加上! 否定您的第二个片段,它与grep之间的空格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。