在目录名中使用’&’

我有一个目录名称与ISO和模拟器有一些重要文件。 并且此目录位于不同的分区中,并且分区未显示在我的FileManager(Nautilus)中。 所以我挂载我的分区并从终端访问它,但我无法进入目录,因为它的名称

当我试图更改目录时:

cd ISO&Emulator 

结果:

 [1] 1635 bash: Emulator: command not found bash: cd: ISO: No such file or directory [1]+ Exit 1 

它将目录名称作为命令。 从终端访问此目录的任何方法?

怎么解决这个问题?

您应该在使用时引用包含特殊字符的文件或目录名称:

 cd 'ISO&Emulator' 
 cd "ISO&Emulator" 

或者逃避(或引用)特殊字符:

 cd ISO\&Emulator cd ISO'&'Emulator cd ISO"&"Emulator 

在大多数情况下,您可以使用自动完成function:

  cd ISO Tab↹ 
  • 最近我找到了一个很好的答案,由@MartinThornton提供,它描述了如何绑定PgUpPgUp以从完成建议中选择特定结果 。

  • 另请参阅: 如何使选项卡完成为目录符号链接添加斜杠?

与单引号不同,当名称包含变量时,双引号适用:

 cd "$HOME/ISO&Emulator" 

由于这不是一个仅限命令行的系统并且安装了图形桌面环境 ,因此您应该了解使用名称需要引用的终端的文件和目录的另一种方法,或者以其他方式输入cumbrersome: 拖动文件夹图标你的文件浏览器进入终端窗口。 在您的系统上,文件浏览器是Nautilus,但这适用于几乎所有文件浏览器。 这将粘贴您拖动图标的文件或目录的完整路径,并自动应用正确的引号

这并不是完全可以替代知道如何使用pa4080描述的技术引用路径名(或者,实际上是任何文本),但它非常有用,可以为您节省大量时间,如果您对时间不满意以及如何使用\来引用,在大多数图形终端模拟器中,这是在您执行此操作时自动应用的引用forms,因此它将向您演示。 (在某些情况下, ' '被使用。)

除非您更改了它,否则在打开终端窗口或在虚拟控制台中登录时获得的shell是Bash 。 在任何shell中引用的目的是告诉shell不要特别处理某些字符。 您可能需要阅读Bash参考手册中的3.1.2 Quoting 。

当你手动引用时,我建议你更喜欢' ' (单引号)forms ,因为它是引用多个文本字符的最简单和最简单的方法。 如果你想引用的内容本身不包含'字符,那么你总是可以用单引号将它括起来,因为在'开始引用之后唯一具有特殊含义的字符是后续'结束引用。


最后,您可能想知道当您有一个不带引号并且在您的命令中时发生了什么

这将前面的内容( cd ISO )作为一个命令处理,在后台异步运行它 ,并将它后面的内容( Emulator )作为第二个命令运行(在前台,因为它没有&之后) )。

  1. [1] 1635报告了后台工作已经开始(这是工作1,其进程ID恰好是1635)。
  2. bash: Emulator: command not found报告没有名为Emulator命令。
  3. 消息bash: cd: ISO: No such file or directory从后台作业到达以报告没有要更改的ISO目录。
  4. [1]+ Exit 1报告作业1已完成。