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

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

但是,cd ~X 将我带到了一个特殊的地方,X 似乎是任何东西。

在 bash 中,如果我点击 "cd ~"并点击 tab,它会显示一堆可能的 ~X 选项,例如 ~mail~postgres~ssh。转到这些文件夹并执行 pwd 显示这些文件夹不在主目录中;他们到处都是。

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

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

最佳答案

这是一个名为“tilde expansion”的 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~1~-1等,配合pushdpopd.

编辑添加:

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

https://stackoverflow.com/questions/998626/

相关文章:

linux - 如何找到我使用的 Fedora 版本?

python - 根据数据类型获取 pandas 数据框列的列表

python - 如何在 Python 中实现树?

python - 获取 MAC 地址

linux - 如何在命令行中从脚本运行函数?

c - 如何在 C 中与 Linux 一起使用共享内存

linux - 附加到进程输出以供查看

python - 从 Pandas 日期时间列中分别提取月份和年份

python - 减少matplotlib图中的左右边距

python - 拆分(分解) Pandas 数据框字符串条目以分隔行