在我的 Linux 机器上,一些环境变量包含目录列表。目录以 分隔:
。但有时它们以 分隔::
。这只是一个应该被视为的错误:
,还是意味着空字符串是目录之一(可能应该解释为当前目录)。
环境变量中指定的大多数目录都具有这种格式:
/aaa/bbb/ccc
然而,其中一些具有这种格式:
/aaa/bbb//ccc
bbb
注意和之间的双斜线ccc
。它被解释为单斜线只是一个错误,还是有特殊含义?
答案1
双冒号 ( ::
) 确实表示当前目录。Bash 手册描述PATH
为:
用冒号分隔的目录列表,shell 将从中查找命令。PATH 值中的零长度(空)目录名称表示当前目录。空目录名称可能显示为两个相邻的冒号,或显示为首冒号或尾冒号。
/foo/bar:.
但就我个人而言,我认为为了清楚起见,最好明确指定当前目录(例如)。
对于斜线,任何数量的相邻斜线都将被视为单斜线。
答案2
多个“/”分隔符将被忽略:
$ cd .////somedir
相当于
$ cd somedir
至于 PATH 中的额外分隔符,经过一些实验表明它们也会被忽略。
至少,这是:
/home/jon.kiparsky:2040 $ echo $PATH
/home/jon.kiparsky/bin::::::/home/jon.kiparsky/bin::/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
没有破坏我的路!:)