Linux bash 中波浪号的含义(不是主目录)

新手上路,请多包涵

首先,我知道 ~/ 是主目录。 CDing 到 ~~/ 将我带到主目录。

然而, cd ~X 把我带到了一个特殊的地方,在那里 X 似乎是什么。

In bash, if I hit “ cd ~ ” and hit tab, it shows a bunch of possible ~X options like ~mail and ~postgres and ~ssh 。转到这些文件夹并执行 pwd 显示这些文件夹不在主目录中;他们到处都是。

它们不是别名。我已经检查过了。它们不是 env. 变量,否则它们需要 $

是什么设置了这些链接,我在哪里可以找到这些链接的设置位置?

原文由 jbu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 941
1 个回答

这是一个称为“ 波浪号扩展”的 Bash 功能。这是外壳的功能,而不是操作系统。例如,您将使用 csh 获得不同的行为。

要回答有关信息来自何处的问题:您的主目录来自变量 $HOME (无论您在那里存储什么),而其他用户的家是使用 getpwent() 实时检索的-- --- 。该功能通常由 NSS 控制;因此默认情况下会从 /etc/passwd 中提取值,尽管可以将其配置为使用所需的任何来源(例如 NIS、LDAP 或 SQL 数据库)检索信息。

波浪号扩展不仅仅是主目录查找。这是一个摘要:

 ~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs and ~1 , ~-1 , etc., are used in conjunction with pushd and popd .

编辑添加:

正如 Sean Bright 在评论中指出的那样,关于主目录的基线波浪号行为被编入 符合 POSIX 标准的 shell 的标准行为。此外,还指定了 wordexp() C API 函数来实现此行为。虽然,显然,谨慎使用。

原文由 tylerl 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题