首先,我知道~/
是主目录。 CD 至~
or ~/
带我到主目录。
然而,cd ~X
带我去一个特别的地方,在那里X
似乎是什么。
在 bash 中,如果我点击“cd ~
“然后点击选项卡,它会显示一堆可能的~X
选项如~mail
and ~postgres
and ~ssh
。转到这些文件夹并执行pwd
显示这些文件夹不在主目录中;他们到处都是。
他们不是别名。我查过了。
他们不是env.
变量,否则他们需要一个$
.
是什么设置了这些链接?我在哪里可以找到这些链接的设置位置?
这是一个名为“波形符扩展 http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html“。这是 shell 的功能,而不是操作系统的功能。例如,使用 csh 会得到不同的行为。
回答有关信息来自何处的问题:您的主目录来自变量$HOME
(无论您在那里存储什么),而其他用户的家庭是使用实时检索的getpwent() http://www.kernel.org/doc/man-pages/online/pages/man3/getpwent.3.html。该功能通常由NSS http://en.wikipedia.org/wiki/Name_Service_Switch;所以默认情况下值被拉出/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
等,与pushd
and popd
.
编辑添加:
As 肖恩·布莱特 https://stackoverflow.com/users/21926在评论中指出,有关主目录的基线波形符行为被编为标准行为符合 POSIX 标准 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_01贝壳。此外,词表达式() https://man7.org/linux/man-pages/man3/wordexp.3.html指定 C API 函数来实现此行为。但显然,请谨慎使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)