假设我在/home/user/中有一个名为Foo的文件夹(我的/home/user也由~表示)。
我想要一个变量
a="~/Foo",然后do
cd $a
我得到了-bash: cd: ~/Foo: No such file or directory
然而,如果我只做cd ~/Foo,它工作得很好。有什么关于如何让它工作的线索吗?
发布于 2011-04-22 02:34:59
您可以这样做(变量赋值时不带引号):
a=~/Foo
cd "$a"但在本例中,变量$a将不存储~/Foo,而是存储扩展形式的/home/user/Foo。或者,您可以使用eval
a="~/Foo"
eval cd "$a"发布于 2011-04-22 02:34:58
您可以使用$HOME代替代字号(代字号由shell展开为$HOME的内容)。示例:
dir="$HOME/Foo";
cd "$dir";发布于 2021-03-01 01:13:45
虽然这个问题只是一个变通方法,但它被列为许多问为什么会发生这种情况的问题的副本,所以我认为有必要给出一个解释。根据https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06的说法
单词扩展顺序如下:
波浪号展开、参数展开、命令替换、算术展开,从头到尾。
当外壳程序对字符串cd $a求值时,它首先执行代字号扩展(这是一个无操作操作,因为$a不包含代字号),然后将$a扩展为字符串~/Foo,这是最终作为参数传递给cd的字符串。
https://stackoverflow.com/questions/5748216
复制相似问题