Citations imbriquées dans des sous-coquilles

13

Disons que je dois utiliser des guillemets pour encapsuler la sortie du sous-shell comme:

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

Mais je dois imbriquer ce genre de choses comme:

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

Je ne peux pas utiliser de guillemets simples car ceux-ci ne développent pas les variables qui sont à l'intérieur d'eux. Les guillemets d'échappement ne fonctionnent pas, car ils sont simplement traités comme du texte passif.

Comment dois-je gérer cela?

Melab
la source
Pourquoi n'utilisez-vous pas DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Réponses:

19

Vous n'avez pas besoin d'échapper les guillemets à l'intérieur d'un sous-shell, car le shell actuel ne les interprète pas (il n'interprète rien de $(à ), en fait), et le sous - shell ne connaît pas les guillemets ci-dessus.

Il n'est pas nécessaire non plus de citer un sous-shell lors de l'affectation de variables, pour plus d'informations, voir man bash.

MichalH
la source
1
Cela dépend de ce que vous essayez de faire, mais c'est généralement une meilleure pratique. Voir github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy
8

Vous n'avez pas besoin d'échapper aux citations imbriquées à l'intérieur. Ils sont analysés correctement, étonnamment!

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