如何转义其中包含 & 符号的子目录名称?

如何转义其中包含 & 符号的子目录名称?

运行 kornshell 并尝试遍历目录树。想要 cd 到名为以下内​​容的子目录:

 -3ab_&_-3dc.img

我的问题是我需要如何转义这个名称中的&符号?我尝试了双引号和反斜杠的不同组合,但没有成功。

答案1

对于&(或几乎任何其他角色),您有两种简单的可能性。

  • 将整个内容用单引号括起来:' -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'

答案2

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

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

相关内容