单引号是否将反斜杠视为特殊的bash脚本?

时间:2015-09-24 05:48:49

标签: regex bash terminal double-quotes single-quotes

从我读过的here开始,“在单引号内,每个特殊字符除了'得到字面解释'。所以,我认为反斜杠(“\”)也会按字面解释。

但是,当我尝试在别名中使用它时,它仍然被解释为一个特殊字符:

alias somefolder='cd /Some\ path/with\ spaces/'

......还能运作吗?

但事实并非如此:

alias somefolder='cd /Some path/with spaces/'

这让我感到惊讶,因为我认为单引号的重点应该是懒惰,即当你没有使用$扩展任何变量时(因为这需要双引号)。

我真的怀疑tldp源是错误的,那么有更好的解释方法吗?感谢。

2 个答案:

答案 0 :(得分:4)

这是因为别名将由shell扩展,在此过程中将删除单引号。所以在别名扩展之后你就会有

cd /Some path/with spaces/

剩下的就像你说的那样会失败。

但是当您使用\来转义空格时,在扩展别名(并删除单引号)之后,shell将具有以下操作:

cd /Some\ path/with\ spaces/

可以按预期工作。

答案 1 :(得分:1)

啊,但你正在构建的别名是将你的单引号var输出到cd命令,这会阻塞你的

cd /Some path/with spaces/

因为cd不知道如何处理空间,而不是你的bash。

\添加到字符串中,如

'cd /Some\ path/with\ spaces/'

cd正在解释\,而不是仅仅是信使的bash。