Comparando strings com caracteres especiais usando if-loop não funciona

2

Eu quero comparar cada linha de um arquivo em particular com a seguinte string

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

("file.txt" contém esta linha em particular)

Eu tentei o seguinte prefixando caracteres especiais com '\'

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
    
por Anusuya Nandi 16.11.2015 / 12:54

2 respostas

1

O método mais simples é usar aspas simples no lado direito:

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

Desta forma, a string a ser correspondida é interpretada literalmente.

Se você preferir usar aspas duplas, não deve escapar os colchetes ( [] ), mas somente as aspas duplas ( "" ):

if [ "$line" == "#orb_plugins = [\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"];" ]
    
por 16.11.2015 / 13:07
2

Por que não usar a ferramenta certa para este trabalho, por exemplo, grep :

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

Isso interrompe a leitura do arquivo assim que uma correspondência for encontrada. É também (em média) cerca de 100 vezes mais rápido que o seu loop while read .

    
por 16.11.2015 / 13:24