Wie werden einfache Anführungszeichen ( '
) und doppelte Anführungszeichen ( "
) mit hex y oktal Zeichen
Wenn Sie etwas wie echo
Ich hatte schon einige wirklich komplizierte, seltsame und schwer zu entschlüsselnde (z. B. sehr verschachtelte) Fälle, bei denen ich nur mit Oktal- oder Hex-Codes arbeiten konnte!
Hier sind einige einfache Beispiele, um zu zeigen, wie es funktioniert:
1. Beispiel für einfache Anführungszeichen, wobei '
wird entkommen mit hex \x27
o oktal \047
(die entsprechende ASCII-Code ):
-
hex \x27
echo -e "Let\x27s get coding!"
# OR
echo -e 'Let\x27s get coding!'
Ergebnis:
Let's get coding!
-
oktal \047
echo -e "Let\047s get coding!"
# OR
echo -e 'Let\047s get coding!'
Ergebnis:
Let's get coding!
2. Beispiel für Anführungszeichen, wobei "
wird entkommen mit hex \x22
o oktal \042
(die entsprechende ASCII-Code ).
Nota: bash
ist verrückt! Manchmal sogar die !
char hat besondere Bedeutung sein und muss entweder innerhalb der doppelten Anführungszeichen entfernt und entkam dann "like this"\!
oder vollständig in einfache Anführungszeichen setzen 'like this!'
und nicht in Anführungszeichen.
# 1. hex; also escape `!` by removing it from within the double quotes
# and escaping it with `\!`
$ echo -e "She said, \x22Let\x27s get coding"\!"\x22"
She said, "Let's get coding!"
# OR put it all within single quotes:
$ echo -e 'She said, \x22Let\x27s get coding!\x22'
She said, "Let's get coding!"
# 2. octal; also escape `!` by removing it from within the double quotes
$ echo -e "She said, \042Let\047s get coding"\!"\042"
She said, "Let's get coding!"
# OR put it all within single quotes:
$ echo -e 'She said, \042Let\047s get coding!\042'
She said, "Let's get coding!"
# 3. mixed hex and octal, just for fun
# also escape `!` by removing it from within the double quotes when it is followed by
# another escape sequence
$ echo -e "She said, \x22Let\047s get coding! It\x27s waaay past time to begin"\!"\042"
She said, "Let's get coding! It's waaay past time to begin!"
# OR put it all within single quotes:
$ echo -e 'She said, \x22Let\047s get coding! It\x27s waaay past time to begin!\042'
She said, "Let's get coding! It's waaay past time to begin!"
Beachten Sie, dass wenn Sie nicht ordnungsgemäß entkommen !
wie ich oben zwei Möglichkeiten aufgezeigt habe, erhalten Sie einige seltsame Fehlermeldungen etwa so:
$ echo -e "She said, \x22Let\047s get coding! It\x27s waaay past time to begin!\042"
bash: !\042: event not found
OR:
$ echo -e "She said, \x22Let\x27s get coding!\x22"
bash: !\x22: event not found
Eine weitere Alternative: Dies erlaubt eine gemischte Expansion und Nicht-Expansion innerhalb desselben Bash-Strings
Hier ist eine weitere Demo einer alternativen Escape-Technik.
Erstens: Lesen Sie die Hauptantwort von @liori um zu sehen, wie das 2. Formular unten funktioniert. Lesen Sie nun diese beiden alternativen Möglichkeiten, um Zeichen zu entkommen. Beide Beispiele sind in ihrer Ausgabe identisch:
CMD="gs_set_title"
# 1. 1st technique: escape the $ symbol with a backslash (\) so it doesn't
# run and expand the command following it
echo "$CMD '\$(basename \"\$(pwd)\")'"
# 2. 2nd technique (does the same thing in a different way): escape the
# $ symbol using single quotes around it, and the single quote (') symbol
# using double quotes around it
echo "$CMD ""'"'$(basename "$(pwd)")'"'"
Beispielhafte Ausgabe:
gs_set_title '$(basename "$(pwd)")'
gs_set_title '$(basename "$(pwd)")'
Anmerkung: für meine gs_set_title
bash-Funktion, die ich habe in meinem ~/.bash_aliases
Datei irgendwo hier siehe meine andere Antwort hier .
Referenzen:
- https://en.wikipedia.org/wiki/ASCII#Printable_characters
- https://serverfault.com/questions/208265/what-is-bash-event-not-found/208266#208266
- Siehe auch meine andere Antwort hier: Wie schreibe ich Nicht-ASCII-Zeichen mit echo? .
33 Stimmen
Ist Ihnen klar, dass Sie für Alias keine einfachen Anführungszeichen verwenden müssen? Doppelte Anführungszeichen sind viel einfacher.
8 Stimmen
Siehe auch: Unterschied zwischen einfachen und doppelten Anführungszeichen in der Bash .
6 Stimmen
Verschachtelte doppelte Anführungszeichen sind ausweichbar,
"\""
daher sollten diese, wann immer möglich, der Antwort von @liori vorgezogen werden.30 Stimmen
Doppelte Anführungszeichen verhalten sich in *nix (einschließlich Bash und verwandten Werkzeugen wie Perl) ganz anders als einfache Anführungszeichen, so dass es KEINE gute Lösung ist, doppelte Anführungszeichen zu ersetzen, wenn es ein Problem mit einfachen Anführungszeichen gibt. Doppelte Anführungszeichen geben an, dass $... Variablen vor der Ausführung ersetzt werden sollen, während einfache Anführungszeichen angeben, dass $... wörtlich zu behandeln sind.
1 Stimmen
Wenn Sie denken, Ich habe doppelte Anführungszeichen verwendet, aber es funktioniert immer noch nicht. , geben Sie Ihr Skript erneut ein.
0 Stimmen
Der letzte Versuch war knapp, entfernen Sie einfach das letzte Zitat.