为什么这个命令不起作用:cd`echo -n“〜”`

时间:2015-07-23 09:56:54

标签: bash cd

运行命令

cd \`echo -n "~"\`

我收到以下错误:

bash: cd: ~: No such file or directory

如果'cd ~'工作正常,会出现什么问题?

3 个答案:

答案 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在运行命令之前编辑该命令。 bashcd ~替换为cd $HOME,然后展开$HOME以获取cd /home/YourUsername

因此,

cd `echo -n "~"`

变为

cd "~"