41

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

4

4 回答 4

30

根据 POSIX 标准,这是不可能的。这不是特定 shell 的函数,PATH 处理是在 C 库中的 execvp 函数中完成的。没有任何形式的引用的规定。

这就是为什么强烈建议不要包含某些字符(不在“可移植文件名字符集”中的任何字符 - 冒号被特别指出作为示例。)的原因。

SUSv7

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

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

于 2015-03-23T14:59:06.300 回答
9

看着这个功能 extract_colon_unit ,在我看来这是不可能的。无条件且不可避免地:用作路径分隔符。

好吧,这至少对bash有效。其他外壳可能会有所不同。

于 2013-02-02T11:38:22.807 回答
5

你可以mount试试看

mount /bin:d /bind
PATH=/bind
于 2014-01-08T01:29:51.023 回答
-4

根据http://tldp.org/LDP/abs/html/special-chars.html单引号应该保留所有特殊字符,所以不尝试它,我认为 '/bin:d' 可以工作(with)in $路径。

于 2015-02-08T15:21:50.667 回答