使用 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\"];" ]

相关内容