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?


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.


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)")"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.