是什么导致 bash 将 ~ 解释为字面上名为“~”的目录?

What would cause bash to interpret ~ as a directory literally named "~"?

背景

我正在使用 Digital Ocean API 创建一个新服务器(droplet)并包含一个 bash 脚本,以便在服务器第一次启动时自动 运行 .

问题

在我的 bash 脚本中(运行 作为 root),我尝试通过它的 shell script 安装 Oh-My-Zsh,它试图将它安装在 ~。但是,当我 ssh 进入机器时,我发现 Oh-My-Zsh 已经安装到 /~/ 而不是 /root

问题

是什么导致 bash 将 ~ 解释为文件夹的名称而不是 $HOME 的别名,有什么我可以怎么做才能解决这个问题? Oh My Zsh 安装脚本不属于我,所以我不能简单地将每个 ~ 更改为 $HOME/root(当然我可以拼凑一个 sed 命令来在那个安装脚本中为我做替换,但似乎应该有更简单的方法...)

这可以通过多种方式发生。拍几张:

  • - 如果波浪号是变量中的文字内容,波浪号扩展将不会在变量扩展时进行。
  • How to manually expand a special variable (ex: ~ tilde) in bash - 如果波浪号表达式是通过其他扩展创建的(即 ~$user),则需要其他方法来扩展它。
  • 如果未定义 $HOME,波浪线扩展将不会发生。