我正在尝试使用控制台通过此命令删除文件
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
传递一个单独的参数,以指示所有单独的参数都是路径而不是选项。)--