如何转义带有&符号的子目录名称?


9

运行内核并尝试遍历目录树。想要cd到一个名为以下子目录:

 -3ab_&_-3dc.img

我的问题是我应该如何用这个名字来逃离&符?我尝试了双引号和反斜杠的不同组合,但均未成功。

Answers:


11

对于&(或几乎所有其他字符,您有两种简单的可能性。

  • 将单引号括起来: ' -3ab_&_-3dc.img'
  • 在每个麻烦的字符前加一个反斜杠: -3ab_\&_-3dc.img

有两个例外:

  • 单引号方法不适用于单引号。反斜杠在单引号内并不特殊,因此您也不能直接使用它。您可以做的是结束单引号字符串,立即使用反斜杠加单引号,然后重新启动单引号。因此,例如,如果目录的名称是foo'bar\quxcd 'foo'\''bar\qux'。您可以这样记住:在单引号内'\''获取单引号。
  • 反斜杠方法不适用于换行符:反斜杠-换行符仅被忽略。您需要在换行符前后加上单引号。

您也可以使用双引号,但随后需要在某些字符前加反斜杠。单引号更简单。

这里还有一个额外的困难,那就是目录的名称以短划线开头。该字符告诉cd命令(几乎像每个命令一样)遵循一个选项。破折号对shell而言不是特殊的,仅对命令而言是特殊的,因此引号不会对其造成影响。您可以通过两种方式将以破折号开头的参数传递给命令而不将其解释为选项:

  • 寻找另一种表达这种观点的方法。对于文件名,./在前面添加仍会指定相同的文件。
  • 把论点放在--前面。这告诉命令停止寻找选项。

因此,这里有一些方法可以更改到此子目录:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'

谢谢。以为我也尝试过这种格式,但我忘了逃脱“&”号(如您的第三个示例)。当我这样做时,它起作用了。
RCinICT 2013年

5

确实需要逃脱&符,但是您遇到的问题很可能与前导-符而不是&符有关。领先的-CD认为您正在传递选项。您可以使用./以下方法解决此问题:

cd './-3ab_&_-3dc.img'

&绝对是一个问题。至于-,则取决于外壳。Zsh非常高兴cd-。开头的目录。但是bash不是。
帕特里克

谢谢。以为我也尝试过这种格式,但我忘了逃脱&符。当我这样做时,它起作用了。
RCinICT 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.