Làm thế nào các biến có thể sử dụng Tiếng ~ ~ cho cd'ing?


13

Làm thế nào tôi có thể sử dụng một biến - $BASEtrong cd của tôi. Tôi đã thử như sau nhưng tôi gặp lỗi

$ 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 

Câu trả lời:


25

Trong cd ~/z/bạn đang sử dụng mở rộng Tilde để mở rộng ~vào thư mục nhà của bạn. Trong BASE="~/z", bạn không phải vì bạn trích dẫn ~nhân vật, vì vậy nó không được mở rộng. Đó là lý do tại sao bạn nhận được một tin nhắn phàn nàn về một ~thư mục không tồn tại . Giải pháp là không trích dẫn nó, tức là BASE=~/zđể cho việc mở rộng xảy ra.


11

@ jw013 đã đưa ra một lời giải thích và giải pháp hợp lệ.

Nhưng có thể có một số trường hợp khi bạn muốn trích dẫn các đường dẫn, ví dụ như khi chúng chứa nhiều khoảng trắng hoặc ký hiệu đặc biệt. Trong trường hợp này, bạn nên sử dụng $HOMEthay vì ~, tức là ý chí của bạn BASE="~/z"sẽ BASE="$HOME/z"hoạt động chính xác, bởi vì sự thay thế tham số được diễn giải trong dấu ngoặc kép, không giống như mở rộng dấu ngã.


5
Đó là một cách để làm điều đó, nhưng nó không cần thiết. BASE=~/"quoted name"chỉ hoạt động tốt, miễn là không ~được trích dẫn.
hvd

4
@hvd: bạn thực sự phải để lại dấu gạch chéo không được trích dẫn. BASE=~/"quoted name"hoạt động, nhưng BASE=~"/quoted name"không.
Gordon Davisson

Bạn đúng. Nắm bắt tốt.
hvd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.