Cotizaciones anidadas en subcapas

13

Digamos que tengo que usar comillas para encapsular la salida del subshell como:

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

Pero necesito anidar este tipo de cosas como:

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

No puedo usar comillas simples porque no expanden las variables que están dentro de ellas. Las comillas de escape no funcionan porque solo se tratan como texto pasivo.

¿Cómo manejo esto?

Melab
fuente
¿Por qué no lo usas DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
Cuonglm

Respuestas:

19

No necesita escapar de las comillas dentro de un subshell, ya que el shell actual no las interpreta (en realidad, no interpreta nada de $(a )), y el subshell no conoce ninguna de las citas anteriores.

Citar una subshell en la asignación de variables también es innecesario, para más información ver man bash.

MichalH
fuente
1
Depende de lo que intente hacer, pero generalmente es una mejor práctica. Ver github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy
8

No necesita escapar de las comillas anidadas en el interior. ¡Se analizan correctamente, sorprendentemente!

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