路径中的Tilde不会扩展到主目录

Ben*_*min 19 syntax bash tilde-expansion

说我有一个文件夹,名为Foo位于/home/user/(我/home/user也被代表~).

我想要一个变量

a="~/Foo" 然后呢

cd $a

我明白了 -bash: cd: ~/Foo: No such file or directory

但是,如果我这样做,cd ~/Foo它工作正常.有关如何使其工作的任何线索?

bmk*_*bmk 25

你可以这样做(在变量赋值期间没有引号):

a=~/Foo
cd "$a"
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,变量$a不会存储,~/Foo而是扩展形式/home/user/Foo.或者您可以使用eval:

a="~/Foo"
eval cd "$a"
Run Code Online (Sandbox Code Playgroud)

  • 使用"eval"的常见警告也应在此处突出显示.**永远不要对未经消毒的数据运行`eval`,或以安全的方式构建自己. (2认同)
  • 不幸的是,如果目录名称包含空格,这将不起作用。`a="~/dir 带空格"; eval cd "$a"` => `-bash: cd: /Users/jack/dir: No such file or directory` :-( (2认同)

use*_*396 13

您可以使用$HOME代替波浪号(波形符号由shell扩展为内容$HOME).例:

dir="$HOME/Foo";
cd "$dir";
Run Code Online (Sandbox Code Playgroud)

  • @userunknown,如果不加引号,就是在告诉 shell *做更多事情*,而这些事情都有失败案例。例如,如果有人设置 `IFS=/` 来读取斜线分隔的输入,即使没有空格,`cd $dir` 也会出现错误行为。扩展不带引号的字符串告诉 shell 对它们进行字符串拆分和全局扩展。你为什么要编写代码来指导 shell 做你不希望它做的事情? (3认同)