是否可以将包含“:”的目录添加到搜索路径

是否可以将包含“:”的目录添加到搜索路径

对于 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"

相关内容