我無法讓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