Ich lese heute ein Shell-Tutorial von http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
In dem es erwähnt:
Wenn ein einzelnes Anführungszeichen in einer auszugebenden Zeichenfolge enthalten ist, sollten Sie nicht die gesamte Zeichenfolge in einzelne Anführungszeichen setzen, sondern dies mit einem Backslash () voranstellen:
echo 'It\'s Shell Programming'
Ich habe es auf meinem Centos-Server versucht, es funktioniert nicht. Es wird gefragt, ob ich mehr tippen möchte >
.
Ich habe mich gefragt, da zwei einfache Anführungszeichen jedes Sonderzeichen in normale Zeichen umwandeln, die ein Escape-Symbol enthalten \
, sich aber selbst ausschließen '
.
Wie soll ich ein einfaches Anführungszeichen '
in einem einfachen Anführungszeichen darstellen?
echo It\'s Shell Programming
oder verwendenecho "It's Shell Programming"
?echo Wow, I'm going to have lots of $$$$$$ now
$
. Etwas wieecho Wow, I\'m going to have lots of \$\$\$\$\$\$ now
oder nurecho Wow, I\'m going to have lots of '$$$$$$' now
echo 'It'"'"'s Shell Programming'
. Ich teile es einfach in 3 Zeichenfolgen ein, wobei die erste und die letzte von einfachen Anführungszeichen umgeben sind, während die mittlere von doppelten Anführungszeichen umgeben ist.Antworten:
Das Tutorial ist falsch.
POSIX sagt:
Hier sind einige Alternativen:
Lesen Sie weiter: Zitate - Gregs Wiki
quelle
echo 'It''s Shell Programming'
Argument : - zsh mitrc_quotes
Optionssatz (und auch die RC-Shell) - Ein paar einfache Anführungszeichen in einfachen Anführungszeichen stehen für ein einfaches Anführungszeichen.q="'"
undqq='"'
mache das manchmal sauberer. Dies erlaubt dannecho "It${q}s ${qq}Shell Programming${qq}"
(geschweifte Klammern werden bei nachgestellten Buchstaben benötigt). POSIX-sicher. Die äußere Schicht muss in doppelte Anführungszeichen gesetzt werden.Sie können verwenden:
Um sicher zu sein, zitieren Sie einen Wert zeilenweise.
Abhängig von der Shell haben Sie möglicherweise auch die Option:
Normalerweise bevorzuge ich:
Ein manuellerer Ansatz könnte folgendermaßen aussehen:
... was zumindest gabelfrei ist.
quelle
printf %q\\n "$arbitrary_value"
, andere sind zu kompliziert.Falls jemand anderes kommt, um eine Mischung aus einfachen und doppelten Anführungszeichen in eine Datei einzufügen, funktioniert dies auch:
Alles, was die Shell als Variable sieht, muss durch einen Backslash maskiert werden:
quelle