特定のファイルの各行を次の文字列と比較したいと思います。
#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\"];" ]