我需要解析$PATH
环境变量在我的应用程序。 所以我想知道什么转义字符将是有效的$PATH
。 我创建了一个名为test目录/bin:d
并创建了一个测试脚本funny
里面。 它运行,如果我有绝对路径调用它。 我只是无法弄清楚如何逃脱:
在$PATH
我试图逃避结肠\
和包成一个'
双"
引号,但总是当我运行。 which funny
无法找到它我跑。 CentOS 6的。
Answer 1:
为此,根据POSIX标准是不可能的。 这不是一个具体的外壳的功能,PATH处理在C库中的函数execvp内完成。 没有规定任何类型的引用的。
这就是为什么包括某些字符的原因(任何未在“移植文件名字符集” - 结肠是专门叫了一声为例)强烈建议反对。
从SUSv7 :
由于
<colon>
是在这种背景下的隔板,可能在路径中使用的目录名称不应该包括一个<colon>
字符。
又见GLIBC execvp的来源 。 我们可以看到它使用了strchrnul
和memcpy
功能,用于处理路径成分,完全没有规定跳过或进行反向转义任何转义字符。
Answer 2:
综观功能extract_colon_unit
在我看来,这是不可能的。 的:
无条件和不可避免用作路径分隔符。
好了,这是有效的,至少对于bash。 其他炮弹可能会有所不同。
Answer 3:
你可以尝试mount
荷兰国际集团它
mount /bin:d /bind
PATH=/bind
Answer 4:
据http://tldp.org/LDP/abs/html/special-chars.html单引号应该保护所有的特殊字符,所以没有尝试的话,我会认为“/ bin中:d”会工作(含)的$ PATH。
文章来源: How to escape colon (:) in $PATH on UNIX?