Ich ersetze immer nur jedes eingebettete einfache Anführungszeichen durch die Sequenz: '\''
(d.h.: quote backslash quote quote), der die Zeichenkette schließt, ein maskiertes einfaches Anführungszeichen anhängt und die Zeichenkette wieder öffnet.
Ich habe oft eine "quotify"-Funktion in meine Perl-Skripte eingebaut, die dies für mich erledigt. Die Schritte wären:
s/'/'\\''/g # Handle each embedded quote
$_ = qq['$_']; # Surround result with single quotes.
Damit sind so gut wie alle Fälle abgedeckt.
Das Leben macht mehr Spaß, wenn man die eval
in Ihre Shell-Skripte einfügen. Sie müssen im Grunde alles noch einmal zitieren!
Erstellen Sie zum Beispiel ein Perl-Skript mit dem Namen quotify, das die oben genannten Anweisungen enthält:
#!/usr/bin/perl -pl
s/'/'\\''/g;
$_ = qq['$_'];
und verwenden Sie es dann, um eine Zeichenkette mit korrekten Anführungszeichen zu erzeugen:
$ quotify
urxvt -fg '#111111' -bg '#111111'
Ergebnis:
'urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''
die dann in den Alias-Befehl kopiert/eingefügt werden kann:
alias rxvt='urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''
(Wenn Sie den Befehl in ein eval einfügen müssen, führen Sie das quotify erneut aus:
$ quotify
alias rxvt='urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''
Ergebnis:
'alias rxvt='\''urxvt -fg '\''\'\'''\''#111111'\''\'\'''\'' -bg '\''\'\'''\''#111111'\''\'\'''\'''\'''
die in ein eval kopiert/eingefügt werden kann:
eval 'alias rxvt='\''urxvt -fg '\''\'\'''\''#111111'\''\'\'''\'' -bg '\''\'\'''\''#111111'\''\'\'''\'''\'''
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.