为什么if 在grep -q时不起作用?

我无法让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将一行文本添加文件的中间?

BASH:“出口k = 1”与“k = 1”之间的差异

Bash脚本继续关键字不断开循环迭代

一个片段有许多错误

如果你想测试返回码,你不想要[ ... ] 放下这些。

[]不是if语法的一部分(正如你可以从你的第二个片段中看到的那样)。

[是系统中内置的和二进制的shell。 它只是退出代码。 if ...; then if ...; then测试…的返回码。

$()是命令替换。 它将替换自己运行的命令的输出

所以[ !$(grep ...) ]实际上是对[ !output_from_grep ]求值, [ word ]被解释为[ -n word ] ,只要word非空,它就是true。 鉴于此! 从来不是非空的,永远是真的。

就像@thom在他的评论中(有点斜线)所表明的那样,加上! 否定您的第二个片段,它与grep之间的空格。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....