终端命令中的问号是什么意思?

终端命令中的问号是什么意思?

这个问题 (如何从 kubuntu 12.04 安装中删除 gnome?)有带问号的命令:

sudo apt-get remove --purge ubuntu-desktop
sudo apt-get remove --purge unity?
sudo apt-get remove --purge gnome?

他们的意思是什么?

答案1

一般来说,在 Bash 中,a?是一个扩展为任意字符的 glob 模式。

例如:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

它类似于*,但*会扩展为0 个或更多字符,而 a?扩展为恰好一个(任意)字符。

不过,在您的特殊情况下,?命令中的显然是打字错误。

答案2

这些被称为通配符(通配符模式)

标准通配符(也称为通配符模式)由各种命令行实用程序使用来处理多个文件。
几乎所有命令(包括 mv、cp、rm 和许多其他命令)都使用标准通配符。

  • (question mark)

    这可以表示任何单个字符。如果您在命令行中指定了某些内容,例如“hd?”,GNU/Linux 会查找 hda、hdb、hdc 以及 az、0-9 之间的每个其他字母/数字。

  • *(asterisk)

    这可以表示任意数量的字符(包括零个,换句话说,零个或多个字符)。如果您指定了“cd*”,它将使用“cda”、“cdrom”、“cdrecord”以及以“cd”开头的任何内容,也包括“cd”本身。“m*l”可以是 mill、mull、ml,以及以 m 开头并以 l 结尾的任何内容。

  • [ ] (square brackets)

    指定一个范围。如果您输入了 m[a,o,u]m,它可以变成:mam, mum, mom 如果您输入了:m[ad]m,它可以变成以 m 开头和结尾且中间有 a 到 d 的任何内容。例如,这些可以起作用:mam、mbm、mcm、mdm。这种通配符指定“或”关系(您只需一个即可匹配)。

  • { } (curly brackets)

    术语之间用逗号分隔,每个术语必须是某个事物的名称或通配符。此通配符将复制与通配符或确切名称匹配的任何内容(“或”关系,非此即彼)。


例如,这是有效的:

  • cp {.doc,.pdf} ~

    这会将以 .doc 或 .pdf 结尾的所有内容复制到用户主目录。请注意,逗号后(或其他任何地方)不允许有空格。

  • [!]

    此结构类似于 [ ] 结构,不同之处在于它不会匹配括号内的任何字符,而是匹配任何字符,只要该字符未列在 [ 和 ] 之间。这是一个逻辑上的非。例如,rm myfile[!9] 将删除所有 myfiles*(即 myfiles1、myfiles2 等),但不会删除名称中任何位置带有数字 9 的文件。

  • \ (backslash)

    用作“转义”字符,即保护后续特殊字符。因此,“\” 搜索反斜杠。请注意,您可能需要使用引号和反斜杠。

更多示例:访问此页面

相关内容