파일에 스크립트 매개변수를 쓰려고 시도하는 스크립트 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 "\\\\"
. 출력이 \
이중 평가로 인한 것임을 알 수 있습니다.