Rich의 POSIX 쉘 팁 - sed 명령에서 $를 이스케이프 처리하는 이유는 무엇입니까?

Rich의 POSIX 쉘 팁 - sed 명령에서 $를 이스케이프 처리하는 이유는 무엇입니까?

sedETA 연구실에 표시된 명령을 이해하려고 노력 중입니다.Rich의 sh(POSIX 쉘) 트릭페이지, 특히 팁쉘은 임의의 문자열을 인용합니다.:

quote () { printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" ; }

sed세 번째 명령( ) 에서 \$s/\$/'/첫 번째 명령 $은 쉘이 이를 가정된 변수로 해석하지 못하도록 이스케이프 처리되어 다음 과 같이 전달되고 올바르게 해석 $s될 수 있음을 이해합니다.sed마지막 줄명령의 주소 s인데 왜 두 번째 명령을 탈출합니까 $? 줄 끝 부분과 정확하게 일치하면 안 되나요?

답변1

줄 끝이 아닌 리터럴이 되도록 $명령에서 정규식 끝을 이스케이프하면 됩니다 .sed

백슬래시가 셸에서 먹기 때문에 명령 sed에 이스케이프가 없습니다 . $표시되는 명령 sed은 다음과 같습니다 $s/$/'/(마지막 줄에서 줄 끝에 작은따옴표를 추가하세요).

결국 귀하의 질문 제목이 잘못되었습니다. sed탈출이 아닌 쉘 탈출에 관한 것입니다.

관련 정보