Citações aninhadas em subshells


13

Digamos que eu precise usar aspas para encapsular a saída do subshell, como:

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

Mas preciso aninhar esse tipo de coisa como:

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

Não posso usar aspas simples porque elas não expandem variáveis ​​que estão dentro delas. O escape de aspas não funciona porque são apenas tratados como texto passivo.

Como eu manejo isso?


Por que você não usa DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Respostas:


19

Você não precisa escapar das aspas dentro de um subshell, pois o shell atual não as interpreta (na verdade, não interpreta nada de $(para )), e o subshell não conhece nenhuma citação acima.

Citar um subshell na atribuição de variáveis ​​também é desnecessário, para obter mais informações, consulte man bash.


1
Depende do que você está tentando fazer, mas geralmente é uma prática recomendada. Veja github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

Você não precisa escapar das aspas aninhadas dentro. Eles são analisados ​​corretamente, surpreendentemente!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.