Verschachtelte Anführungszeichen in Unterschalen

13

Angenommen, ich muss Anführungszeichen verwenden, um die Subshell-Ausgabe wie folgt zu kapseln:

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

Aber ich muss solche Sachen verschachteln wie:

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

Ich kann keine einfachen Anführungszeichen verwenden, da die darin enthaltenen Variablen nicht erweitert werden. Das Ausblenden von Anführungszeichen funktioniert nicht, da sie nur als passiver Text behandelt werden.

Wie gehe ich damit um?

Melab
quelle
Warum benutzt du nicht DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
Dienstag,

Antworten:

19

Sie müssen die Anführungszeichen in einer Subshell nicht maskieren, da die aktuelle Shell sie nicht interpretiert (sie interpretiert eigentlich nichts von $(bis )) und die Subshell keine Anführungszeichen kennt, die über ihnen liegen.

Das Zitieren einer Unterschale bei der Variablenzuweisung ist ebenfalls nicht erforderlich. Weitere Informationen finden Sie unter man bash.

MichalH
quelle
1
Es hängt davon ab, was Sie versuchen, aber es ist in der Regel eine bewährte Methode. Siehe github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy
8

Sie müssen den geschachtelten Anführungszeichen nicht entkommen. Überraschenderweise werden sie richtig analysiert!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
weises Glück
quelle