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?

Melab
fonte
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.

MichalH
fonte
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)")"
wisbucky
fonte