Da ich mein erstes Skript schreibe, bin ich mir sicher, dass dies eine grundlegende Frage ist, aber kann mir bitte jemand erklären, warum ich:
cd ~
cd bin
cd ~/bin
cd 'bin'
Aber nicht
cd '~'
cd '~/bin'
Ich muss cd
zu einem Verzeichnispfad mit einem Leerzeichen in einem der Verzeichnisnamen, also brauche ich die Anführungszeichen (es ist Windows Program Files
unter Wein). Ich kann es mit zwei cd
umgehen Befehle, aber warum kann ich ~
nicht eingeben in Anführungszeichen?
Wenn ich cd '~'
eingebe (oder cd "~"
) bekomme ich:
bash: cd: ~: No such file or directory
Akzeptierte Antwort:
Wie @karel in seiner Antwort bemerkte, ~
ist ein Sonderzeichen und wird von Bash in das Home-Verzeichnis des aktuellen Benutzers erweitert. Siehe Bashs Handbuch zu „Tilde Expansion“ oder suchen Sie auf der Manpage nach der Überschrift „Tilde Expansion“ (man bash
).
Jede Art von Zitat um den ~
verhindert diese Tildeerweiterung.
Um Ihre Frage zu beantworten, wie Sie es trotzdem zum cd
verwenden können in ein Verzeichnis mit Leerzeichen im Namen, gibt es einige Alternativen:
-
Lassen Sie Anführungszeichen weg und maskieren Sie die Leerzeichen stattdessen mit Backslashes:
cd ~/foo/spaces are cool/bar
-
Zitieren Sie den Rest des Pfads, aber lassen Sie sie um die Tilde und den ersten Schrägstrich weg:
cd ~/"foo/spaces are cool/bar"
Wie Sie sehen, können Sie Strings in Anführungszeichen und ohne Anführungszeichen in Bash verketten, indem Sie sie einfach ohne Leerzeichen nebeneinander schreiben.
-
Verwenden Sie die Umgebungsvariable
$HOME
anstelle der Tilde, die immer noch in „doppelte Anführungszeichen“ (aber nicht „einfache Anführungszeichen“) erweitert wird:cd "$HOME/foo/spaces are cool/bar"