Suche…
Syntax
- \ C (ein beliebiges Zeichen außer Zeilenvorschub)
- "alles wörtliche außer Anführungszeichen"; 'this:' \ '' ist ein einzelnes Zitat '
- $ 'nur \\ und \' sind speziell; \ n = Newline usw. '
- "$ variable und anderer Text; \" \\\ $ \ `sind speziell"
Zeilenumbrüche und Steuerzeichen
Ein Zeilenvorschub kann in einer Zeichenfolge mit einer oder zwei Anführungszeichen enthalten sein. Beachten Sie, dass der Backslash-Zeilenvorschub keine Zeilenumbrüche ergibt. Der Zeilenumbruch wird ignoriert.
newline1='
'
newline2="
"
newline3=$'\n'
empty=\
echo "Line${newline1}break"
echo "Line${newline2}break"
echo "Line${newline3}break"
echo "No line break${empty} here"
In Dollar-Anführungszeichen-Zeichenketten können Backslash-Letter oder Backslash-Octal wie in vielen anderen Programmiersprachen zum Einfügen von Steuerzeichen verwendet werden.
echo $'Tab: [\t]'
echo $'Tab again: [\009]'
echo $'Form feed: [\f]'
echo $'Line\nbreak'
Doppelte Anführungszeichen für die Ersetzung von Variablen und Befehlen
Variablensubstitutionen sollten nur in Anführungszeichen verwendet werden.
calculation='2 * 3'
echo "$calculation" # prints 2 * 3
echo $calculation # prints 2, the list of files in the current directory, and 3
echo "$(($calculation))" # prints 6
Außer in doppelten Anführungszeichen nimmt $var
den Wert von var
, teilt ihn in durch Leerzeichen getrennte Teile auf und interpretiert jeden Teil als ein Glob (Wildcard) -Muster. Wenn Sie dieses Verhalten nicht wünschen, setzen Sie $var
immer in Anführungszeichen: "$var"
.
Gleiches gilt für Befehlsersetzungen: "$(mycommand)"
ist die Ausgabe von mycommand
, $(mycommand)
ist das Ergebnis von split + glob in der Ausgabe.
echo "$var" # good
echo "$(mycommand)" # good
another=$var # also works, assignment is implicitly double-quoted
make -D THING=$var # BAD! This is not a bash assignment.
make -D THING="$var" # good
make -D "THING=$var" # also good
Befehlsersetzungen erhalten ihre eigenen Zitatkontexte. Beliebig verschachtelt Substitutionen zu schreiben ist einfach , weil der Parser Spur Schachtelungstiefe hält statt Gierig zum ersten Benutzer "
Charakter der Stackoverflow Syntax - Highlighter dies falsch analysiert, aber zum Beispiel..:
echo "formatted text: $(printf "a + b = %04d" "${c}")" # “formatted text: a + b = 0000”
Variable Argumente für eine Befehlsersetzung sollten auch in den Erweiterungen in Anführungszeichen gesetzt werden:
echo "$(mycommand "$arg1" "$arg2")"
Zitieren von wörtlichem Text
Alle Beispiele in diesem Absatz geben die Zeile aus
!"#$&'()*;<=>? @[\]^`{|}~
Ein Backslash zitiert das nächste Zeichen, dh das nächste Zeichen wird wörtlich interpretiert. Die einzige Ausnahme ist eine Newline: backslash-newline erweitert die leere Zeichenfolge.
echo \!\"\#\$\&\'\(\)\*\;\<\=\>\?\ \ \@\[\\\]\^\`\{\|\}\~
Der gesamte Text zwischen einfachen Anführungszeichen (vorwärts zitiert '
, die auch als Apostroph bekannt) ist buchstäblich gedruckt. Sogar der Backslash steht für sich selbst, und es ist unmöglich, ein einzelnes Zitat hinzuzufügen. Stattdessen können Sie die Literalzeichenfolge anhalten, ein einzelnes Anführungszeichen in einen Backslash einfügen und die Literalzeichenfolge erneut starten. Die 4-stellige Sequenz '\''
erlaubt also effektiv, ein einzelnes Anführungszeichen in eine Literal-Zeichenfolge einzufügen.
echo '!"#$&'\''()*;<=>? @[\]^`{|}~'
# ^^^^
Ein einfaches Anführungszeichen für Dollar setzt wie viele andere Programmiersprachen ein String-Literal $'…'
, in dem der nächste Buchstabe mit Backslash zitiert wird.
echo $'!"#$&\'()*;<=>? @[\\]^`{|}~'
# ^^ ^^
Anführungszeichen setzen "
Semi-Literal-Zeichenketten, bei denen nur die Zeichen "
\
$
und `
ihre besondere Bedeutung behalten. Diese Zeichen benötigen einen umgekehrten Schrägstrich (beachten Sie, dass der umgekehrte Schrägstrich erhalten bleibt, wenn einem anderen Zeichen ein umgekehrter Schrägstrich folgt). Anführungszeichen sind meistens nützlich, wenn eine Variable oder eine Befehlsersetzung eingefügt wird.
echo "!\"#\$&'()*;<=>? @[\\]^\`{|}~"
# ^^ ^^ ^^
echo "!\"#\$&'()*;<=>? @[\]^\`{|}~"
# ^^ ^ ^^ \[ prints \[
Interaktiv, hüte dich das !
löst Historienerweiterung in Anführungszeichen aus: "!oops"
sucht nach einem älteren Befehl, der oops
; "\!oops"
führt keine Verlaufserweiterung aus, behält aber den Backslash bei. Dies geschieht nicht in Skripten.
Unterschied zwischen Anführungszeichen und Anführungszeichen
Doppelter Anführungsstrich | Einzelzitat |
---|---|
Ermöglicht die variable Erweiterung | Verhindert die variable Erweiterung |
Erlaubt die Erweiterung des Verlaufs, falls aktiviert | Verhindert die Erweiterung der Geschichte |
Ermöglicht die Befehlsersetzung | Verhindert die Ersetzung von Befehlen |
* und @ können eine besondere Bedeutung haben | * und @ sind immer Literale |
Kann sowohl ein einfaches als auch ein doppeltes Zitat enthalten | Ein einzelnes Zitat ist innerhalb eines einfachen Zitats nicht zulässig |
$ , ` , " , \ kann mit \ entkommen, um ihre besondere Bedeutung zu verhindern | Alle sind Literale |
Eigenschaften, die beiden gemeinsam sind:
- Verhindert das Glätten
- Verhindert das Teilen von Wörtern
Beispiele:
$ echo "!cat"
echo "cat file"
cat file
$ echo '!cat'
!cat
echo "\"'\""
"'"
$ a='var'
$ echo '$a'
$a
$ echo "$a"
var