Die Shell führt eine Wortaufteilung für Argumente durch, bevor sie an den von Ihnen angegebenen Befehl übergeben werden. Dies bedeutet, dass die Zeile (oder in einigen Fällen auch Zeilen) standardmäßig an Leerzeichen, Tabulatoren und Zeilenumbrüchen in mehrere Wörter aufgeteilt wird.
Wie Lưu Vĩnh Phúc erwähnte, können Backslashes und einfache Anführungszeichen verwendet werden, um zu verhindern, dass einzelne Zeichen oder alles zwischen ihnen in Wörter aufgeteilt werden. Doppelte Anführungszeichen funktionieren auch:
cd "October Fall"
In diesem speziellen Fall '
und "
verhalten sich identisch, aber sie haben Unterschiede .
'
Deaktiviert alle Sonderzeicheninterpretationen (gerade \
), kann jedoch kein a enthalten '
. "
Deaktiviert nur die Wortteilung und die Dateinamenerweiterung (bei der Dateinamenerweiterung werden beispielsweise ls *.mp3
alle Dateien mit Namen aufgelistet, die auf enden .mp3
. *
Dies löst hier die Dateinamenerweiterung aus). Da "
einige Argumenterweiterungen zulässig sind, ist es hilfreich, wenn Sie beispielsweise einen Dateinamen mit einem Leerzeichen in einer Variablen haben:
$ filename=October\ Fall
$ # ^-- Still need a backslash or quoting to prevent word
$ # splitting here, but the backslash/quotes will not be stored
$ cd $filename
bash: cd: October: No such file or directory
$ cd '$filename'
bash: cd: $filename: No such file or directory
$ cd "$filename"
$ pwd
/path/to/October Fall
Beachten Sie, dass '
und verursachen "
Sie (standardmäßig) keine Wortaufteilung selbst, sodass dies, obwohl es chaotisch ist, für Sie funktionieren würde:
cd "Oct"'ober F'"all"
Dies ist nützlich, wenn Sie beispielsweise ein Verzeichnis mit dem Namen haben Octobers' $HOME
. Das '
darin enthaltene einzelne Anführungszeichen '
und die darin enthaltenen "
Anführungszeichen $HOME
werden in Ihr Home-Verzeichnis erweitert. Aber jede dieser Kombinationen (und viele andere) funktioniert sicher:
cd Octobers\'\ \$HOME
cd "Octobers' "'$HOME'
cd "Octobers' "\$HOME
cd "Octobers' \$HOME"
Zu beachten ist außerdem, dass viele moderne Shells eine Tab-Vervollständigung bieten. Sowohl Bash als auch Zsh (wahrscheinlich auch Ksh, aber ich habe es nicht getestet) können einen Teil des Namens eines Verzeichnisses auf seinen vollständigen Namen erweitern, einschließlich sicherer Flucht über \
s. So cd Octobers<tab>
wird cd Octobers\'\ \$HOME
. Möglicherweise müssen Sie mehrmals die Tabulatortaste drücken, wenn mehrere Übereinstimmungen vorliegen. In Ihrer Shell ist möglicherweise nicht standardmäßig die Tab-Vervollständigung aktiviert. Überprüfen Sie die Dokumentation Ihrer Shell.