~
是$HOME
许多外壳程序提供的别名,但$HOME
更通用。 $HOME
实际上要求外壳程序在此处插入(替代)环境变量HOME。有很多可以替代的不同环境变量,请尝试运行env
以获取列表。请注意,~
当不是单词开头时,并不总是可以识别出来。尝试使用以下两个命令进行比较:
ls /~
ls /$HOME
第一个传递给ls可执行文件/~
,然后该文件尝试查看在~
根目录中调用的文件,第二个扩展$HOME
并变为//home/user
,然后将其作为命令行参数传递给ls可执行文件。所有的POSIX系统(POSIX是UNIX和Linux系统如何操作的标准)都允许将多个斜杠视为一个斜杠,因此//home/user
与上述说法相同/home/user
。 ~username
是告诉外壳程序在passwd文件中查找用户名并返回其主目录的快捷方式。没有等效的环境变量。所有这些替换操作都是由外壳程序完成的,并且大多数情况下都受其支持,但是只有类似的环境变量$HOME
才能被所有外壳程序所支持。也,cd
实际上是一个内置命令。这是一个特殊的指令,告诉外壳程序本身更改目录。它不同于其他可以作为单独的可执行文件实现的Shell内置程序echo
,因为它用于更改Shell进程的基本属性。 echo
出于性能原因,它只是内置的shell,但在UNIX的美好时光中,仅作为其自己的可执行文件才可用/bin/echo
。