1

根据我在这里读到的内容,它说“在单引号内,除 ' 之外的每个特殊字符都被逐字解释”。所以,我认为反斜杠(“\”)也会被逐字解释。

但是,当我尝试在别名中使用它时,它仍然以某种方式被解释为特殊字符:

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

……还能用吗?

然而这并没有:

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

这让我感到惊讶,因为我认为单引号的全部意义应该是为了懒惰,即当你不使用扩展任何变量时$(因为这需要双引号)。

我真的怀疑 tldp 来源是错误的,那么有没有更好的方法来解释这一点?谢谢。

4

2 回答 2

4

这是因为 alias 会被 shell 扩展,在这个过程中单引号会被移除。因此,在别名扩展之后,您将拥有

cd /Some path/with spaces/

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

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

cd /Some\ path/with\ spaces/

这将按预期工作。

于 2015-09-24T05:53:38.860 回答
1

啊,但是您正在构建的别名正在将您的单引号 var 放到cd命令中,这让您窒息

cd /Some path/with spaces/

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

当您\

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

就是cd解释\,而不是 bash ,它只是一个信使。

于 2015-09-24T05:53:52.503 回答