环境变量值中的 // 和 :: 是什么意思?

环境变量值中的 // 和 :: 是什么意思?

在我的 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

没有破坏我的路!:)

相关内容