次の簡略化されたコードを使用して、配列内のアイテムが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を出力すると予想します$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ステートメントのブール値の構文が正しくないことも意味します。したがって、私の質問は2つあります。
$file
かどうかを確認するにはどうすればよいですか?$file
。man grep
)。これoptions
により、ファイルにない配列内のすべての要素がエコーされます。
options=(
A
B
C
)
for i in "${options[@]}"; do
if ! grep -qF "$i" "$file"; then
echo "$i"
fi
done
-q
grepにフラグを追加しました。これにより、grepが一致する行が抑制され、そうでない場合はstdoutに送信されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加