Citazioni nidificate in sottotitoli


13

Supponiamo che devo usare le virgolette per incapsulare l'output della subshell come:

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

Ma ho bisogno di nidificare questo tipo di cose come:

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

Non posso usare le virgolette singole perché quelle non espandono le variabili che sono al loro interno. Le citazioni di escape non funzionano perché vengono trattate come testo passivo.

Come posso gestirlo?


Perché non usi DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm,

Risposte:


19

Non è necessario sfuggire alle virgolette all'interno di una subshell, poiché la shell corrente non le interpreta (in realtà non interpreta nulla da $(a ), in realtà) e la subshell non è a conoscenza di eventuali virgolette sopra.

Anche la citazione di una subshell con assegnazione variabile non è necessaria, per maggiori informazioni consultare man bash.


1
Dipende da cosa stai cercando di fare, ma di solito è una buona pratica. Vedi github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

Non è necessario sfuggire alle citazioni nidificate all'interno. Vengono analizzati correttamente, sorprendentemente!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.