Bash
在文件中搜尋數組中的字元串
我正在嘗試使用以下簡化程式碼檢查數組
options
中的項目是否在文件中:$file
options=( A B C ) for i in "${options[@]}"; do if grep -F $file "${i}" = false; then echo "${i}" fi done
如果 A、B 或 C 中不存在,我希望它輸出 A、B 或 C
$file
,而是輸出 A、B 和 C:grep: A: No such file or directory grep: =: No such file or directory grep: false: No such file or directory
由此看來,grep 似乎將所有參數解釋為要檢查或檢查的文件,這也意味著 if 語句中的布爾值沒有正確的語法。所以我的問題是雙重的:
- 如何使用 grep 或其他命令來檢查數組中的元素是否在
$file
?- 如何防止此命令將布爾值解釋為參數,而不是將其作為 if 語句的一部分?
- 引用所有變數擴展,包括
$file
.- 您不應該檢查“布爾值”。在shell中,沒有這樣的東西。您的意思是檢查 grep 的退出程式碼,如果沒有匹配行則為 1,如果匹配行則為 0(您可以在 中找到它
man grep
)。- 檢查 grep 參數的順序。首先是模式,然後是文件名。
這將回顯數組
options
中不在文件中的所有元素:options=( A B C ) for i in "${options[@]}"; do if ! grep -qF "$i" "$file"; then echo "$i" fi done
我在 grep 中添加了
-q
標誌,它禁止 grep 匹配的行,否則將被發送到標準輸出。