bash 스크립트에서 egrep에 변수 인수 전달

bash 스크립트에서 egrep에 변수 인수 전달

파일에 스크립트 매개변수를 쓰려고 시도하는 스크립트 myScript가 있습니다. 어떻게 든 egrep 명령으로 변수 확장이 제대로 작동하지 않습니다. 나는 내 예에서 문제를 다음과 같이 분리했다고 생각합니다. egrep 명령은 스크립트에 매개변수를 명시적으로 작성하면 작동하지만 매개변수를 스크립트에 전달하면 egrep 명령은 내가 보낸 매개변수를 좋아하지 않습니다.

#!/bin/bash
echo "\def\\$1" > myFile
echo "\def\\$1$1" >> myFile

myVar=\\$1
echo myVar is "$myVar"

grepWorks=$(egrep '\\def\\dog\>' myFile)
echo Without a variable, grep output is $grepWorks

echo Pattern string fed to grep with variable myVar is  "\\def$myVar"
grepFails=$(egrep "\\def$myVar\>" myFile)
echo With a variable, grep output is $grepFails

이 스크립트를 실행하면,

myScript dog

출력은 다음과 같습니다

myVar is \dog
Without a variable, grep output is \def\dog
Pattern string fed to grep with variable myVar is \def\dog
With a variable, grep output is

어떤 도움이라도 대단히 감사하겠습니다.

답변1

다음 줄을 변경하십시오.

grepFails=$(egrep "\\def$myVar\>" myFile)

그리고:

grepFails=$(egrep "\\\\def\\$myVar\>" myFile)

문제는 \서브쉘에서 올바르게 이스케이프되지 않는다는 것입니다.

이해하려면 를 실행해 보세요 eval echo "\\\\". 출력이 \이중 평가로 인한 것임을 알 수 있습니다.

관련 정보