波浪号在Linux Bash中的含义
Contents
1. 概述
~(波浪号)字符在 Linux 中具有特殊含义。许多用户使用此字符来寻址其用户家中的文件或目录。然而,这并不是它的唯一用途。在本教程中,我们将了解称为波浪线扩展的 Bash 功能。因为波浪号扩展是 shell 而不是操作系统的一个特性,所以 shell 之间的实现是不同的。本文中的所有示例都特定于 Bash shell。
2. 我们的用户主页
如概述部分所述,~ 以扩展到用户的主目录而闻名。无论我们在文件系统的哪个位置,我们总是可以通过运行以下命令返回到我们的主目录:
$ cd ~
我们实际上可以从*$HOME*环境变量中获取主目录。因此,上面的语句等价于:
$ cd $HOME
我们甚至可以改变*$HOME*的值,让它指向我们想要的任何地方。例如:
$ export HOME=/tmp
$ cd ~
$ pwd
/tmp
3.其他用户的家
将用户名添加到 ~ 会将其扩展到该特定用户的主目录。例如,如果我们想进入 Alice 的主目录,我们将运行:
$ cd ~alice
显然,我们无法从*$HOME获取此信息。相反,Bash 的波浪号扩展使用getpwent() *函数从密码数据库中检索此信息。
4. 工作目录
波浪号扩展也可用于解析当前或以前的工作目录。我们可以通过添加 +(加号)将 ~ 扩展到我们当前的工作目录:
$ cd /tmp
$ echo ~+
/tmp
同样,-(减号)符号扩展到以前的工作目录:
$ cd /etc
$ echo ~-
/tmp
当前和以前的工作目录分别取自*$PWD和$OLDPWD*环境变量。
5. 目录栈
最后,我们还可以使用 ~ 来引用目录堆栈中的目录。Bash 中的目录堆栈是最近访问过的目录列表,可以使用pushd 和popd 命令进行操作。想象一下我们的目录堆栈在某一时刻看起来像:
$ dirs
/bin /dev /etc /home /lib /opt /var /
使用 ~ 和索引号,我们可以从左到右引用目录堆栈中的每个条目,从 0(零)开始:
$ echo ~0
/bin
$ echo ~1
/dev
$ echo ~6
/
通过在我们的索引前面加上一个减号,我们从右到左遍历堆栈:
$ echo ~-0
/
$ echo ~-1
/opt
$ echo ~-6
/bin