Wie können Variablen "~" für die CD verwenden?

13

Wie kann ich eine Variable verwenden - $BASEin meiner CD. Ich habe Folgendes versucht, aber es wird eine Fehlermeldung angezeigt

$ cd ~/z/repo_1_ruby_193/
23:23:57 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ BASE="~/z"
23:24:03 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ cd $BASE/repo_1_ruby_193
-bash: cd: ~/z/repo_1_ruby_193: No such file or directory
23:24:25 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 
Michael Durrant
quelle

Antworten:

25

In verwenden cd ~/z/Sie die Tilde-Erweiterung , um ~in Ihr Ausgangsverzeichnis zu expandieren . In BASE="~/z"bist du nicht, weil du den ~Charakter zitiert hast , also wird er nicht erweitert. Aus diesem Grund erhalten Sie eine Meldung, in der Sie sich über ein nicht vorhandenes ~Verzeichnis beschweren . Die Lösung ist, es nicht zu zitieren, dh BASE=~/zdie Expansion stattfinden zu lassen.

jw013
quelle
11

@ jw013 hat eine gültige Erklärung und Lösung angegeben.

Es kann jedoch vorkommen, dass Sie die Pfade in Anführungszeichen setzen möchten, z. B. wenn sie mehrere Leerzeichen oder spezielle Symbole enthalten. In diesem Fall sollten Sie $HOMEstatt verwenden ~, dh Ihr BASE="~/z"Wille wird BASE="$HOME/z"und funktioniert korrekt, da die Parameterersetzung im Gegensatz zur Tilde-Erweiterung in doppelten Anführungszeichen interpretiert wird.

Ruslan
quelle
5
Das ist eine Möglichkeit, aber es ist nicht notwendig. BASE=~/"quoted name"funktioniert einwandfrei, solange das ~nicht zitiert wird.
HDV
4
@hvd: Sie müssen den Schrägstrich auch nicht zitieren. BASE=~/"quoted name"funktioniert, aber BASE=~"/quoted name"nicht.
Gordon Davisson
Du hast recht. Guter Fang.
HDV