Shell

使用 if-loop 將字元串與特殊字元進行比較不起作用

  • November 16, 2015

我想將特定文件的每一行與以下字元串進行比較

#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

最簡單的方法是在右側使用單引號:

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

這樣,要匹配的字元串按字面意思解釋。

如果您更喜歡使用雙引號,則不能轉義括號 ( []),而只能轉義雙引號 ( ""):

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

為什麼不使用正確的工具來完成這項工作,即grep

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

一旦找到匹配項,這將停止讀取文件。它也(平均)比你的while read循環快 100 倍。

引用自:https://unix.stackexchange.com/questions/243295