Tun, zsh oder bash-Angebote, die bequem für den englischen text?
Wenn ich einzelne Zitate, Wörter mit Apostroph ("nicht") sind ärgerlich, um zu entkommen:
'Don'"'"'t do that'
Wenn ich verwenden Sie doppelte Anführungszeichen, Dollarzeichen und Ausrufezeichen Reise bis:
"It cost like \$1000\!"
Gibt es eine andere Art zu zitieren, die ich nutzen kann?
Bearbeiten: ich sollte auch hinzufügen, dass ich gerne weitergeben möchte diesen string direkt als Kommandozeilen-argument, eher als das speichern in eine variable. Zu diesem Zweck habe ich versucht, mit DigitalRoss Lösung,
$ echo "$(cat << \EOF
Don't $worry be "happy".
EOF)"
aber bekommen
dquote cmdsubst>
nach drücken der EINGABETASTE :/. Also an dieser Stelle ZyX Vorschlag von setopt rcquotes
sieht die bequemste.
- die letzten
EOF
muss auf einer Linie von selbst, keine anderen Zeichen. Setzen Sie die schließende Klammer auf der nächsten Zeile. - Ich bekomme das gleiche Ergebnis.
- Hmm, die shell wartet auf das single-Angebot aufeinander abgestimmt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit zsh, die Sie tun können,
. Dann ASCII-Apostrophe sind entkommen wie dieser:
. Oder richten Sie Ihre Tastaturbelegung eingeben zu können, UTF Apostrophe, Sie haben keine Probleme mit jeglicher Art der Angebote (einschließlich keiner) in jeder shell:
. Dritte arbeitet sowohl für zsh und bash:
.
Weder die erste noch die Dritte eingrenzen können Zitat auf ein einzelnes Zeichen, aber Sie sind immer noch weniger wortreich für nicht-langen strings dann heredocs oben vorgeschlagen. Mit der zsh kann man dies tun, indem Sie benutzerdefinierte accept-line-widget ersetzen Konstrukte wie
'Don't'
mit'Don'\''t'
. Erfordert relativ komplizierte regex-Magie, die ich schreiben kann, nur in perl; und das ist wahrscheinlich nicht die beste Idee, wie ich kann nicht behaupten, ich kann auf alle möglichen Fälle, bevor Sie getroffen wird. Es wird nicht in jedem Fall berühren Sie eine beliebige Skripte.Ich mag die Richtung, die Zsolt Botykai wird. Hier ist ein Beispiel, funktioniert mit jeder Posix-shell. (Ich habe auch überprüft, dass es überlebt seine paste in die server SO.)
Die Dinge, die diese Arbeit machen;
-r
machen\
keine Magie\EOF
statt nurEOF
macht$
keine Magie$IFS
führende und nachfolgende Leerzeichen werden entfernt. Auch, es funktioniert nur für single-line-text.'EOF'
wird, ist die Wirkung der single-zitieren Sie den ganzen text:read -r x << 'EOF'
Wenn Sie vergeben wollen, zitierten text in eine variable, die Sie noch verwenden können, heredocs, wie (und es kann ein mehrzeiliger text zu):
Bash-syntax
$'string'
ist ein anderes quoting-Mechanismus, der es ermöglicht, ANSI-C-wie escape-Sequenzen und den ausbau zu einfachen Anführungszeichen version.Sehen https://stackoverflow.com/a/16605140/149221 für mehr details.