Shell
使用 if-loop 將字元串與特殊字元進行比較不起作用
我想將特定文件的每一行與以下字元串進行比較
#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 倍。