为了完整起见...
- Just
path
是一个名为的文件或目录path
在当前目录中。
-
./path
是一个名为的文件或目录path
在当前目录中,并拼写出目录。点目录.
代表当前目录,并且path
是此目录中的文件或目录的名称。
-
~/path
是一个简写$HOME/path
where $HOME
是一个引用您的主目录的变量。通常您的主目录将位于类似的位置/home/you
or /Users/you
where you
是您的帐户名。 (命令echo "$HOME"
将显示您的主目录。)扩展的值是绝对路径(除非您弄乱了$HOME
彻底),如最初的斜线所示。
-
/path
是一个绝对路径,引用名为的文件或目录path
这是在root目录/
。 Unix 上的每个文件最终都位于从根目录开始的目录树中的某个位置。
以以下内容开头的文件名$
在其名称中包含 shell 变量的值(例如$HOME
多于);您必须知道该变量的值才能确定它最终包含相对路径还是绝对路径。相似地,~
文件名开头的部分被 shell 替换(“扩展”)为不同的字符串,如上所述。
(从技术上讲,文件名也可以以文字美元符号或波形符开头;然后您必须引用或反斜杠转义该字符,以避免 shell 将其扩展为其他内容。这相当不方便,因此这些文件名在实践中往往很少见。)
在下面的说明中,我们引用任何此类替换的结果,并忽略可能引用的复杂性。
每个文件名以/
is an absolute路径(又名完整路径)它解释了如何从根目录开始到达特定节点。例如,/var/tmp/you/reminder.txt
指一个文件或目录reminder.txt
(从名称来看,可能是一个文件;但 Unix 并不关心你如何称呼你的文件或目录)位于目录中you
这是在目录中tmp
这是在目录中var
它位于根目录中。
每个不以以下字符开头的文件名/
is a relativepath 指示如何从当前目录开始到达特定文件或目录。特殊目录..
是父目录(即包含该目录的目录)和特殊目录.
是当前目录。所以path/there
指文件或目录there
目录内path
在当前目录中;以及(将鼠标悬停在灰色区域上可显示剧透)
there/.././and/back/..
是一种(极其复杂的)引用目录的方式and
在当前目录下,我们遍历there
目录,然后移回当前目录;然后停留在当前目录;然后参考目录back
目录内and
,但然后返回到该目录的父目录,最终得到./and
.
此外~/
对于当前用户的主目录,某些 shell 和应用程序允许使用这种表示法~them/
引用用户帐户的主目录them
。此外,某些 Web 服务器配置允许每个用户在其目录中拥有一个公共网站~/public_html
和 URL 符号http://server/~them/
将提供用户帐户的网站them
对于外部访客。
The 当前目录是 shell 提供的一种便利,因此您不必一直键入长路径。如果你愿意的话,你可以。
/bin/ls /home/you/Documents/unix-101/directories.txt
这是一种冗长但完全有效的说法(假设您位于主目录中),
ls Documents/unix-101/directories.txt
你也可以说
cd Documents/unix-101
ls directories.txt
直到你cd
同样,您的所有命令都将在此目录中运行。
See 当前工作目录到底是什么?对这个相关概念进行更长时间的阐述。
“目录”有时被那些还没有到喜欢前者的年龄的人称为“文件夹”。
切线,不要混淆目录名称.
使用 Bourne shell 命令,该命令包含一个点(也因其 Bash 别名而闻名)source
)。命令
. ./scriptname
运行文件中的命令./scriptname
在当前 shell 实例的上下文中,而不是在单独的子 shell 中(这只是./scriptname
做)。换句话说,该命令行调用点命令在一个文件上scriptname
in the 点目录。
Bourne shell(以及 Bash、Zsh 等衍生产品)使用单引号来防止变量扩展和通配符扩展,并使用双引号来允许变量扩展,但禁止字符串中的通配符扩展。 Windows 上的引用规则不同,通常使用双引号将空格分隔的值保留为单个字符串(并且%
代替$
用于变量替换)。