Gel*_*ler 38 linux escaping path environment-variables
我需要$PATH在我的应用程序中解析环境变量.所以我想知道哪些转义字符有效$PATH.我创建了一个名为test的测试目录/bin:d并在其中创建了一个测试脚本
 funny.如果我用绝对路径调用它,它就会运行.我只是无法弄清楚如何逃脱:的$PATH我试图逃跑的结肠\和包成单',双"引号.但总是在我跑的which funny时候找不到它.我正在运行CentOS 6.
Ran*_*832 24
根据POSIX标准,这是不可能的.这不是特定shell的功能,PATH处理是在C库的execvp函数内完成的.没有任何报价规定.
这就是为什么包含某些字符(任何不在"可移植文件名字符集"中的内容 - 冒号都被特别调用为例)的强烈推荐.
来自SUSv7:
由于
<colon>在此上下文中是分隔符,因此可能在PATH中使用的目录名称不应包含<colon>字符.
另见GLIBC execvp的来源.我们可以看到它使用strchrnul和memcpy函数来处理PATH组件,绝对没有规定跳过或取消任何类型的转义字符.
看看这个功能
 extract_colon_unit
在我看来这是不可能的.在:无条件和不可避免用作路径分隔符.
嗯,这至少对bash有效.其他壳可能会有所不同