对于 bash,环境变量的路径分隔符$PATH
是":"
出于好奇:
如果有一个名为的目录
$HOME/with:character
有什么方法可以将其添加到搜索路径吗?
请注意,我认为添加:
到文件名并不是一个很聪明的想法,但我想知道如果我遇到这样的目录,我是否可以将其添加到搜索路径中
我尝试使用反斜杠,但这似乎不起作用:
export PATH="$PATH:$HOME/with\\:character"
double :
( ::
) 也不起作用
答案1
没有办法转义冒号。根据 POSIX 标准,这是不可能的。PATH 处理是execvp
在 C 库中的函数内完成的,其中没有任何类型的引用。这就是为什么包含不在
可移植文件名字符集
强烈建议不要这样做。
从SUSv7:
由于
<colon>
在此上下文中是分隔符,因此 PATH 中可能使用的目录名称不应包含字符<colon>
。
也可以看看GLIBC execvp 的来源。它使用strchrnul
函数来处理 PATH 组件,而不进行任何类型的转义。
最好的办法是重命名目录。如果确实需要该名称,您可以创建一个符号链接并将其添加到$PATH
:
$ cd /path/to/add
$ ln -s a:b a_b
$ PATH="$PATH:/path/to/add/a_b/bin"