unset $HOME 但是 '~' 仍然有 home 为什么?

unset $HOME but '~' works has home anyway why?

做我自己的shell

你好,我正在做我自己的 shell 版本并将其与 bash(学校项目)进行比较。我注意到当我 运行 以下命令 unset HOME; cdunset HOME; cd $HOME 它说:

bash: cd: HOME not set

好的,对我来说一切都很好但是.. 使用此命令 cd ~ bash 转到我的主目录,或者当我 运行 echo ~ 它打印我的主目录。

那你们是怎么处理的呢?我只是用这样的方式编码:

bash: cd: HOME not set

来自 the man page for bash:(强调)

波浪线扩展

如果单词以未加引号的波浪字符 (`~') 开头,则所有 第一个不带引号的斜杠(或所有 字符,如果没有不带引号的斜杠)被认为是 波浪号前缀。如果波浪号前缀中的 none 个字符是 引用,波浪号后波浪号前缀中的字符 被视为可能的登录名。如果此登录名是 空字符串,代字号替换为 shell 的值 参数主页。 如果未设置 HOME,则为用户的主目录 执行 shell 被替代。 否则, 波浪号前缀替换为关联的主目录 指定的登录名。