서브 쉘에 중첩 된 따옴표


13

서브 쉘 출력을 캡슐화하기 위해 따옴표를 사용해야한다고 가정 해보십시오.

DATA="$(cat file.hex | xxd -r)"

그러나 나는 이런 종류의 물건을 중첩시켜야합니다 :

DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")"

작은 따옴표는 그 안에있는 변수를 확장하지 않기 때문에 사용할 수 없습니다. 이스케이프 따옴표는 수동 텍스트로 취급되기 때문에 작동하지 않습니다.

이것을 어떻게 처리합니까?


왜 사용하지 DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"않습니까?
cuonglm

답변:


19

현재 셸 은 따옴표를 해석하지 않으며 ( 실제로 ~ $(를 해석하지 않음) 서브 은 위의 따옴표에 대해 알지 못 )하므로 하위 에서 따옴표를 이스케이프 처리 할 필요 가 없습니다 .

변수 할당시 서브 쉘을 인용 할 필요도 없습니다 man bash. 자세한 내용은를 참조하십시오 .


1
수행하려는 작업에 따라 다르지만 일반적으로 모범 사례입니다. 참조 github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

내부의 중첩 따옴표를 이스케이프 처리하지 않아도됩니다. 놀랍게도 제대로 파싱됩니다!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.