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"
但在这种情况下, $a
variables不会存储~/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”