删除名称中带有 `(` 字符的文件时出现语法错误

删除名称中带有 `(` 字符的文件时出现语法错误

我正在尝试使用控制台通过此命令删除文件

rm ./google-chrome-stable_current_amd64(1).deb

但我收到语法错误。这个命令有什么问题?

答案1

括号被 shell 特殊处理。引用他们的话删除它们的特殊含义,以便 shell 按字面意思处理它们。

引用主要有三种形式,对于此目的来说,其中任何一种都可以:

  • 由于()不是'字符,因此它们在内部按字面意思处理单引号(只要单引号本身没有被引用)。
  • 由于它们不是$、、或,`因此它们在内部按字面意思处理\!双引号(只要双引号本身没有被引用)。
  • 和其他角色一样,他们被直白地对待之后\(只要反斜杠本身没有被引用)。

因此,以下任何一种方法都可以奏效:

rm ./google-chrome-stable_current_amd64\(1\).deb  # backslashes
rm './google-chrome-stable_current_amd64(1).deb'  # single quotes
rm "./google-chrome-stable_current_amd64(1).deb"  # double quotes

虽然不太常用,但你也可以使用单引号或双引号来引用部分参数。例如,这些也可以:

rm ./google-chrome-stable_current_amd64'(1)'.deb
rm ./google-chrome-stable_current_amd64"(1)".deb

另外,请注意,您不需要./在此处的路径开头,但可以包含它。使用 时rm,只有当路径以字符开头时才需要它-,这将尝试将其视为一个或多个选项而不是路径。(尽管您也可以在路径前rm传递一个单独的参数,以指示所有单独的参数都是路径而不是选项。)--

相关内容