我需要$PATH
在我的应用程序中解析环境变量。所以我想知道哪些转义字符在$PATH
. 我创建了一个名为的测试目录/bin:d
,并在其中创建了一个名为的测试脚本
funny
。如果我用绝对路径调用它,它就会运行。我只是不知道如何转义:
,$PATH
我尝试使用转义冒号\
并将其包装成单引号'
和双"
引号。但总是在我运行which funny
时找不到它。我正在运行 CentOS 6。
问问题
10916 次
4 回答
30
根据 POSIX 标准,这是不可能的。这不是特定 shell 的函数,PATH 处理是在 C 库中的 execvp 函数中完成的。没有任何形式的引用的规定。
这就是为什么强烈建议不要包含某些字符(不在“可移植文件名字符集”中的任何字符 - 冒号被特别指出作为示例。)的原因。
从SUSv7:
由于
<colon>
是此上下文中的分隔符,因此可能在 PATH 中使用的目录名称不应包含<colon>
字符。
另请参阅GLIBC execvp 的来源。我们可以看到它使用strchrnul
和memcpy
函数来处理 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 回答