~/ 如何工作?

~/ 如何工作?

在终端中,引用主页的一种方法是使用~/。我不明白这是如何工作的,因为 的输出file ~/是:

/home/admin/: directory

运行~/结果如下:

-bash: /home/admin/: Is a directory

~/那么转换成什么呢/home/admin

~/似乎也可以在 中使用/bin/dash,所以我还知道它不是 bash 特有的。

答案1

这是波浪号扩展

波浪符号扩展需要POSIX(看到第一个链接页面)并出现在所有现代伯恩风格的贝壳. 其中包括流行的 shell bash、、ksh93zsh,但也包括更简约的 shell,如mksh、、dashbusybox ash

实际上,不同的 POSIX 兼容 shell 有时在波浪号扩展的精确细节上有所不同,既包括未指定HOME但未设置或为空的情况,也包括允许~符号用于除扩展用户主目录以外的其他目的的情况。例如,波浪符号扩展bashPWD还提供了访问和变量值的简写形式OLDPWD,分别使用~-~+

然而,在典型情况下,它在 Bourne 风格的 shell 中工作方式大致相同。这些都是典型情况(但请注意,这种分离它们不是官方的,这只是我呈现材料的方式):

  • ~或者~/直接扩展到您的主目录。
  • ~/后面跟着更多的路径组件,扩展为从您的主目录开始的路径。
  • ~username或者~username/本身扩展为用户名为 的用户的主目录username
  • ~username/后跟更多路径部分,扩展为从用户名为 的用户的主目录开始的路径username

答案2

~$HOME

~是“简写”方式,$HOME换句话说就是您的主目录。它在 shell 中有效(例如bash),称为“波浪线扩展”。

如果您添加尾部斜杠,则表示您正在谈论目录。

例子:

$ ls -d ~/
/home/sudodus/
$ ls -d ~
/home/sudodus
$ ls -d $HOME
/home/sudodus

$ sudo -i
[sudo] lösenord för sudodus: 
# ls -d ~/
/root/
# ls -d ~
/root
# exit
logout

$ ls xournal.png
xournal.png

$ LANG=C ls xournal.png/
ls: cannot access 'xournal.png/': Not a directory

相关内容