GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Warum kann ich nicht auf eine Tilde in Anführungszeichen (‘~’) cd?

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"
    

Ubuntu
  1. Warum kann Podman mein Image nicht ziehen?

  2. Linux – Warum kann der Kernel Init nicht ausführen?

  3. Warum kann Xargs nicht mit Tail -f arbeiten?

  4. Warum kann ich Leerzeichen in einem Bash-Skript nicht maskieren?

  5. Warum kann ich die Linux-Anzeige nicht exportieren?

Ist es möglich, die Tilde ('~', Home-Verzeichnis) neu zu definieren?

Kann keine Verbindung zu Wireless 13.10 herstellen?

Kann $catalina_home nicht echoen?

Warum kann ich Tomboy nicht in Ubuntu Mate 19.04 installieren?

Warum kann ich keine große Anzahl von Dateien auf das USB-Flash-Laufwerk kopieren?

Warum kann ich keine E-Mails empfangen?