从我读过的here开始,“在单引号内,每个特殊字符除了'得到字面解释'。所以,我认为反斜杠(“\”)也会按字面解释。
但是,当我尝试在别名中使用它时,它仍然被解释为一个特殊字符:
alias somefolder='cd /Some\ path/with\ spaces/'
......还能运作吗?
但事实并非如此:
alias somefolder='cd /Some path/with spaces/'
这让我感到惊讶,因为我认为单引号的重点应该是懒惰,即当你没有使用$
扩展任何变量时(因为这需要双引号)。
我真的怀疑tldp源是错误的,那么有更好的解释方法吗?感谢。
答案 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。