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

일치하는 항목이 발견되면 파일 읽기가 중지됩니다. 또한 (평균적으로) loop 보다 약 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\"];" ]

관련 정보