서브셸에 중첩된 따옴표

서브셸에 중첩된 따옴표

예를 들어, 서브쉘 출력을 캡슐화하기 위해 따옴표를 사용해야 한다고 가정해 보겠습니다.

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

하지만 다음과 같이 중첩해야 합니다.

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

작은따옴표는 내부 변수를 확장하지 않으므로 사용할 수 없습니다. 이스케이프된 따옴표는 수동 텍스트로 처리되기 때문에 작동하지 않습니다.

이 문제를 어떻게 처리해야 합니까?

답변1

서브쉘 내부의 따옴표를 이스케이프 처리할 필요는 없습니다.현재 쉘설명하지 않습니다(사실 $(에서 ~까지 아무것도 설명하지 않습니다 )).서브쉘위의 참조 내용을 전혀 알지 못합니다.

변수에 값을 할당할 때 서브쉘을 인용하는 것도 불필요합니다 man bash. 자세한 내용은 을 참조하세요.

답변2

내부 중첩 따옴표를 이스케이프 처리할 필요는 없습니다. 놀랍게도 올바르게 구문 분석되었습니다!

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

답변3

방금 $()서브쉘의 stdout을 참조로 처리하여 성공했으므로 변수 확장 시 내부 따옴표를 사용했습니다.

# Part of an MSys2 reimplementation of realpath, hence the `-W`
input="../../My Programs"
output=$(cd "$input"; pwd -W) 
echo "$output"

공백은 My Programs그대로 유지되며 악의적인 따옴표는 표시되지 않습니다.output

관련 정보