Wenn bash erweitert wird $dir
, wird nur eine Wortaufteilung und ein Globbing durchgeführt. Word - Spaltung erzeugt drei Worte: cd
, "/cygdrive/c/Program
und Files/"
. Dann ist der auszuführende Befehl cd
mit zwei Argumenten; cd
betrachtet nur das erste Argument "/cygdrive/c/Program
, das kein vorhandenes Verzeichnis ist.
Wenn Sie eine vollständige Shell-Bewertung des Inhalts einer Variablen durchführen möchten, verwenden Sie eval
:
eval "$dir"
Beachten Sie, dass Sie doppelte Anführungszeichen benötigen $dir
, da sonst zuerst eine Wortaufteilung durchgeführt und dann eval
die Argumente mit Leerzeichen verknüpft werden. Dies würde hier zwar funktionieren, aber im Allgemeinen schlecht werden (z. B. wenn ein Dateiname zwei aufeinanderfolgende Leerzeichen enthält).
Eine Zeichenfolge ist jedoch nicht der richtige Weg, um einen Shell-Befehl zu speichern, den Sie ausführen möchten. Sofern Sie keine ungewöhnlichen Anforderungen haben, sollten Sie stattdessen eine Funktion verwenden:
dir () {
cd "/cygdrive/c/Program Files/"
}
Wenn Sie wirklich daran interessiert sind, zu tippen $dir
, um zu einem bestimmten Verzeichnis zu wechseln, und dies nicht nur ein einfaches Beispiel ist, geben Sie in bash 4 shopt -s autocd
Ihr .bashrc
und set ein
dir="/cygdrive/c/Program Files/"
Danach können Sie einfach "/cygdrive/c/Program Files/"
oder "$dir"
an der Shell-Eingabeaufforderung eingeben, um in dieses Verzeichnis zu wechseln. Sie brauchen immer noch die doppelten Anführungszeichen $dir
; Wenn dir das nicht gefällt, benutze zsh anstelle von bash.