Bagaimana variabel dapat menggunakan "~" untuk melakukan cd?

13

Bagaimana saya bisa menggunakan variabel - $BASEdi cd saya. Saya mencoba yang berikut tetapi saya mendapatkan kesalahan

$ 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
sumber

Jawaban:

25

Di cd ~/z/Anda menggunakan ekspansi Tilde untuk memperluas ~ke direktori home Anda. Dalam BASE="~/z", Anda bukan karena Anda mengutip ~karakter, jadi itu tidak diperluas. Itu sebabnya Anda mendapat pesan yang mengeluh tentang ~direktori tidak ada . Solusinya adalah tidak mengutipnya, yaitu BASE=~/zuntuk membiarkan ekspansi terjadi.

jw013
sumber
11

@ jw013 telah memberikan penjelasan dan solusi yang valid.

Tetapi mungkin ada beberapa kasus ketika Anda ingin mengutip path, misalnya ketika mengandung banyak spasi atau simbol khusus. Dalam hal ini Anda harus menggunakan $HOMEalih-alih ~, yaitu BASE="~/z"kemauan Anda menjadi BASE="$HOME/z"dan bekerja dengan benar, karena penggantian parameter ditafsirkan dalam tanda kutip ganda, tidak seperti ekspansi tilde.

Ruslan
sumber
5
Itu salah satu cara untuk melakukannya, tetapi itu tidak perlu. BASE=~/"quoted name"berfungsi dengan baik, asalkan ~dibiarkan kutip.
hvd
4
@ DVD: Anda benar-benar harus meninggalkan tanda kutip juga tanda kutip. BASE=~/"quoted name"bekerja, tetapi BASE=~"/quoted name"tidak.
Gordon Davisson
Kamu benar. Tangkapan yang bagus.
hvd