运行命令
cd \`echo -n "~"\`
我收到以下错误:
bash: cd: ~: No such file or directory
如果'cd ~'
工作正常,会出现什么问题?
答案 0 :(得分:4)
如果执行cd ~
,则在执行命令之前,shell会将~
扩展到您的主目录。但是如果你使用双引号("~"
),则将其作为文字字符串而不是展开。
你可以看到差异:
$ echo ~
/home/username
$ echo "~"
~
为了让shell扩展~
,您需要删除双引号。
Bash手册中描述了双引号的转义行为:http://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
答案 1 :(得分:4)
问题是bash在命令替换后不会进行额外的扩展。因此,cd ~
按照您希望的方式展开,cd $(echo '~')
不会。
有一个名为eval
的关键字是为这种情况创建的 - 它会强制命令行再次展开( eval uated)。如果在该行上使用eval
,则会强制~
扩展到用户目录,即使已经过了正常的扩展时间。 (因为~
在运行echo命令之前不存在,并且在那时,它对于扩展来说太晚了。)
eval cd `echo -n "~"`
答案 2 :(得分:0)
如果只是执行cd "~"
:
$ cd "~"
bash: cd: ~: No such file or directory
cd
不明白~
是特殊的。它尝试并失败,找到一个名为~
的目录。
cd ~
的工作原因是bash
在运行命令之前编辑该命令。 bash
将cd ~
替换为cd $HOME
,然后展开$HOME
以获取cd /home/YourUsername
。
因此,
cd `echo -n "~"`
变为
cd "~"