一尘不染

如何在UNIX的$ PATH中转义冒号(:)?

linux

我需要$PATH在我的应用程序中解析环境变量。所以我想知道在中哪些转义字符有效$PATH。我创建了一个测试目录,/bin:d并在其中创建了一个测试脚本
funny。如果我用绝对路径调用它,它将运行。我只是想不通如何转义:$PATH因为我尝试用冒号转义\并将其包装为单引号'和双"引号。但总是在我运行which funny时找不到它。我正在运行CentOS 6。


阅读 433

收藏
2020-06-03

共1个答案

一尘不染

根据POSIX标准,这是不可能的。这不是特定Shell的功能,PATH处理是在C库的execvp函数内完成的。没有提供任何形式的报价。

这就是为什么强烈建议不要包含某些字符(“便携式文件名字符集”中不包含任何字符-专门以冒号为例)的原因。

SUSv7

由于<colon>在这种情况下是分隔符,因此可能在PATH中使用的目录名称不应包含<colon>字符。

另请参阅GLIBC
execvp的来源
。我们可以看到它使用strchrnulmemcpy函数来处理PATH组件,而绝对没有提供跳过或转义任何类型的转义符的条件。

2020-06-03