变量如何使用“~”进行 cd'ing?

Mic*_*ant 13 shell bash cd-command quoting variable

如何使用变量 -$BASE在我的 cd 中。我尝试了以下操作,但出现错误

$ 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 
Run Code Online (Sandbox Code Playgroud)

jw0*_*013 25

cd ~/z/您使用波浪号扩展扩展~到您的主目录中。在 中BASE="~/z",你不是因为你引用了这个~字符,所以它没有被扩展。这就是为什么您会收到一条消息,抱怨一个不存在的~目录。解决方案是不引用它,即BASE=~/z为了让扩展发生。


Rus*_*lan 11

@jw013 给出了有效的解释和解决方案。

但是在某些情况下,您确实想要引用路径,例如,当它们包含多个空格或特殊符号时。在这种情况下,您应该使用$HOME而不是~,即您BASE="~/z"将变为BASE="$HOME/z"并正常工作,因为参数替换是用双引号解释的,与波浪号扩展不同。

  • 这是一种方法,但不是必需的。`BASE=~/"quoted name"` 工作得很好,只要 `~` 不加引号。 (5认同)
  • @hvd:您实际上也必须不引用斜杠。`BASE=~/"quoted name"` 有效,但 `BASE=~"/quoted name"` 无效。 (4认同)