我需要$PATH在我的应用程序中解析环境变量。所以我想知道在中哪些转义字符有效$PATH。我创建了一个测试目录,/bin:d并在其中创建了一个测试脚本 funny。如果我用绝对路径调用它,它将运行。我只是想不通如何转义:,$PATH因为我尝试用冒号转义\并将其包装为单引号'和双"引号。但总是在我运行which funny时找不到它。我正在运行CentOS 6。
$PATH
/bin:d
funny
:
\
'
"
which funny
根据POSIX标准,这是不可能的。这不是特定Shell的功能,PATH处理是在C库的execvp函数内完成的。没有提供任何形式的报价。
这就是为什么强烈建议不要包含某些字符(“便携式文件名字符集”中不包含任何字符-专门以冒号为例)的原因。
从SUSv7:
由于<colon>在这种情况下是分隔符,因此可能在PATH中使用的目录名称不应包含<colon>字符。
<colon>
另请参阅GLIBC execvp的来源。我们可以看到它使用strchrnul和memcpy函数来处理PATH组件,而绝对没有提供跳过或转义任何类型的转义符的条件。
strchrnul
memcpy