我无法让grep在if语句中正常工作。在下面的代码段中,if-check总是成立(即没有找到该单词),并且程序打印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
这工作完全正常,并认为这个词没有任何问题。
那么第一段代码有什么问题?
在感叹号后面试一下空格,可能有帮助。 – thom 2014-10-08 02:42:48
如果你想测试返回码,你不需要'[...]'。放下这些。 '[]'不是'if'语法的一部分。 '['是系统中内置的和二进制的shell。它只是退出代码。 '如果...;然后'测试'...'的返回码。 – 2014-10-08 02:49:53
'aspellwords'从哪里来?如果它是一个文件,你希望更像'words =($(grep -Fvxf aspellwordsfile.memory))''如果这些文件已经不是每行一个字的话,可能会有一些改变。 – tripleee 2014-10-08 03:20:17