Tilde扩展在Bash中不起作用

假设我有一个名为Foo的文件夹位于/home/user/ (我的/home/user也由~表示)。

我想有一个variables

a="~/Foo"然后做

cd $a

我得到-bash: cd: ~/Foo: No such file or directory

但是,如果我只是做cd ~/Foo它工作正常。 任何线索如何得到这个工作?

你可以做(​​variables赋值时不加引号):

 a=~/Foo cd "$a" 

但在这种情况下, $avariables不会存储~/Foo而是扩展forms/home/user/Foo 。 或者你可以使用eval

 a="~/Foo" eval cd "$a" 

您可以使用$HOME而不是代字号(代字号由shell扩展到$HOME的内容)。 例:

 dir="$HOME/Foo"; cd "$dir"; 

更强大的解决scheme是使用像sed甚至更好的bash参数扩展:

 somedir="~/Foo/test~/ing"; cd ${somedir/#\~/$HOME} 

或者如果你必须使用sed,

 cd $(echo $somedir | sed "s#^~#$HOME#") 

如果使用双引号,那么〜将保留为$ a中的那个字符。

cd $ a不会扩展〜因为variables值不被shell扩展。

解决scheme是:

eval“cd $ a”