Ich habe Probleme mit der Flucht vor Charakteren in der Bash. Ich möchte einfache und doppelte Anführungszeichen vermeiden, während ein Befehl unter einem anderen Benutzer ausgeführt wird. Nehmen wir zum Zweck dieser Frage an, ich möchte Folgendes auf dem Bildschirm wiedergeben:
'single quote phrase' "double quote phrase"
Wie kann ich alle Sonderzeichen umgehen, wenn ich auch zu einem anderen Benutzer wechseln muss:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Dies führt natürlich nicht zum richtigen Ergebnis.
shell
quoting
escape-characters
m33lky
quelle
quelle
bash
ist auf dem besten Weg, mich wütend zu machen.Antworten:
Sie können die folgende String-Literal-Syntax verwenden:
Von
man bash
quelle
Befolgen Sie in einer POSIX-Shell die folgenden grundlegenden Vorschriften, vorausgesetzt, in Ihrer Zeichenfolge gibt es keine Variablen-, Befehls- oder Verlaufserweiterung und keine Zeilenumbruchzeile:
Führen Sie die folgenden Aktionen aus, um eine generische Zeichenfolge in einfache Anführungszeichen zu setzen:
Ersetzen Sie eine beliebige Folge von Zeichen, die keine einfachen Anführungszeichen sind, durch die gleiche Folge, indem Sie einfache Anführungszeichen und abschließende Anführungszeichen hinzufügen:
'aaa' ==> ''aaa''
Flucht mit einem Backslash jeden bereits existierenden Apostroph Zeichen:
' ==> \'
Insbesondere
''aaa'' ==> \''aaa'\'
Führen Sie die folgenden Aktionen aus, um eine generische Zeichenfolge in doppelte Anführungszeichen zu setzen:
Fügen Sie führende und nachfolgende doppelte Anführungszeichen hinzu:
aaa ==> "aaa"
Entfliehen Sie mit einem Backslash jedem Anführungszeichen und jedem Backslash-Zeichen:
" ==> \", \ ==> \\
Einige Beispiele:
Damit könnte Ihr Beispiel folgendermaßen erweitert werden:
quelle
Einfaches Beispiel für das Entziehen von Anführungszeichen in der Shell:
Dies geschieht, indem Sie bereits geöffnetes (
'
) beenden , escape-Zeichen setzen (\'
) und dann ein anderes öffnen ('
).Alternative:
Sie beenden das bereits geöffnete (
'
), platzieren das Zitat in einem anderen Zitat ("'"
) und öffnen dann ein anderes ('
).Verwandte Themen: Wie vermeide ich einfache Anführungszeichen innerhalb von Zeichenfolgen in einfachen Anführungszeichen? bei stackoverflow SE
quelle
Die akzeptierte Antwort funktioniert für einfache (einstufige) Zitate:
Damit der Befehl angezeigt wird, müssen Sie ihn zweimal zitieren.
Dieses Skript könnte die ganze Arbeit erledigen:
Führen Sie das Skript aus, um Folgendes zu erhalten:
Die erste Zeile funktioniert für einfaches Echo:
Die zweite Zeile funktioniert für den Befehl in doppelten Anführungszeichen:
quelle
Echo "Ich bin ein Student" funktioniert nicht. Aber das Folgende funktioniert:
echo $ 'I \' ma student 'Aus der Manpage von bash:
Ein einfaches Anführungszeichen darf nicht zwischen einfachen Anführungszeichen stehen, auch wenn ein Backslash vorangestellt ist. .... Wörter der Form $ 'string' werden speziell behandelt. Das Wort wird zu einer Zeichenfolge erweitert, wobei mit einem Backslash versehene Zeichen gemäß dem ANSI C-Standard ersetzt werden.
quelle