为什么非转义的双引号路径适用于测试,但不适用于别名?

时间:2012-12-21 18:36:28

标签: scripting bash

我正在尝试仅在某个路径上存在可执行文件时才为程序设置别名。到目前为止,我一直在我的所有脚本中使用双引号用于路径和别名,但是使用包含空格的路径时遇到了问题。

例如,我已经设置了一个变量:PATH_TO_SUBL="/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"。测试它([[ -x $PATH_TO_SUBL ]])有效,但在别名中使用它不会(alias subl=$PATH_TO_SUBL导致bash返回 / Applications / Sublime:没有这样的文件或目录)。< / p>

当我使用单引号和转义空格(PATH_TO_SUBL='/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl')设置时,测试和别名都可以正常工作。那是为什么?

1 个答案:

答案 0 :(得分:4)

使用:

alias subl="$PATH_TO_SUBL"

否则您的alias命令将被解析为:

alias suble=/some/thing else/here

没有做出正确的别名定义。

(它在[[ ... ]]条件中没有引号的情况下工作,因为它们直接由shell处理它们的规则。如果你实际使用test {{1}有条件的。)