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

Rom*_*man 5 linux path environment-variables

在我的 Linux 机器上,一些环境变量包含目录列表。目录由 分隔:。但有时它们是分开的::。这只是一个错误,应该被视为:还是意味着空字符串是目录之一(可能应该被解释为当前目录)。

环境变量中指定的大多数目录都具有以下格式:

/aaa/bbb/ccc
Run Code Online (Sandbox Code Playgroud)

但是,其中一些具有以下格式:

/aaa/bbb//ccc
Run Code Online (Sandbox Code Playgroud)

bbb注意和之间的双斜杠ccc。这只是一个被解释为单个斜杠的错误还是有特殊含义?

jjl*_*lin 5

双冒号 ( ::) 确实表示当前目录。Bash手册描述PATH为:

以冒号分隔的目录列表,shell 在其中查找命令。PATH 值中的零长度(空)目录名指示当前目录。空目录名称可能显示为两个相邻的冒号,或者开头或结尾的冒号。

但就我个人而言,我认为为了清楚起见,最好明确指定当前目录(例如,/foo/bar:.)。

对于斜杠,任何数量的相邻斜杠都被视为单个斜杠。


Jon*_*sky 1

多个“/”分隔符将被忽略:

$ cd .////somedir
Run Code Online (Sandbox Code Playgroud)

相当于

$ cd somedir
Run Code Online (Sandbox Code Playgroud)

至于 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
Run Code Online (Sandbox Code Playgroud)

没有断我的路!:)