ifループを使用して文字列と特殊文字を比較すると機能しません。

ifループを使用して文字列と特殊文字を比較すると機能しません。

特定のファイルの各行を次の文字列と比較したいと思います。

#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];

(「file.txt」にはこの特定の行が含まれています)

私は特殊文字の前に「\」を付けて、次のことを試しました。

IFS=''
while read -r line
do
  if [ "$line" == "#orb_plugins = \[\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"\];" ]
  then
    echo "String found. Do remaining steps"
  fi
done < file.txt

答え1

作業に適したツール、つまり次のものを使用するのはどうですかgrep

grep -qxFf- file.txt <<\IN && printf %s\\n "String found. Do remaining steps"
#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];
IN

一致するものが見つかると、ファイルの読み取りは停止します。また、(平均的に)ループより約100倍高速ですwhile read

答え2

最も簡単な方法は、右側に一重引用符を使用することです。

if [ "$line" == '#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];' ]

これにより、一致する文字列が文字通り解釈されます。

二重引用符を使用する場合は、角かっこ([])をエスケープしないでください。二重引用符("")だけをエスケープする必要があります。

if [ "$line" == "#orb_plugins = [\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"];" ]

関連情報