(*\:2) 中的星号、反斜线、冒号和两个是什么意思?

Jür*_*ach 14 bash expansion

以下ls命令是什么意思?

ls -l *\:2,*T
Run Code Online (Sandbox Code Playgroud)
  • ls = 列表
  • -l = 长(列表)
  • *T可能意味着T最后

但是那个*\:2和逗号呢?

Eug*_*eck 25

*\:2,*T是要列出的文件的全局模式。要理解它,我们需要记住以下几点:

  • : 必须在外壳中转义,成为 \:
  • 文件名可以很容易地包含逗号

所以*\:2,*T会匹配一个名为TranscationNumber:2,EventType:XYT

编辑

从评论中,转义的必要性(或不是):需要几句话:转义标志并不是绝对必要的:,但 bash 本身在自动完成时会建议它。

  • 从什么时候开始必须对 `:` 进行转义? (11认同)
  • `:` 不需要转义。它仅在特定情况下(当用作命令时)是特殊的,而不是在 glob 模式中。`\:` 等价于 `:`,转义没有区别。 (7认同)
  • 谢谢 Eugen 和 HBruijn。我怀疑有一些复杂的通配符模式,但实际上它应该只匹配冒号和逗号,这是我在处理文件时没有想到的。现在,该命令完全有意义:列出 Maildir 目录中的所有电子邮件文件,这些文件被标记为“已删除”(T)。顺便提一句。数字 2 表示版本 2 中的 Maildir(参见 https://wiki2.dovecot.org/MailboxFormat/Maildir)。 (3认同)
  • @terdon & @Aaron 冒号`:` 是`COMP_WORDBREAKS` 环境变量的默认值的一部分。在 Bash 自动补全中,读取行库将这些字符用作单词分隔符,并且包含冒号的文件名当然应该是单个单词。因此 bash 自动完成需要转义冒号的原因,尽管否则它是“*主要*”而不是特殊字符...... (3认同)

HBr*_*ijn 14

列出所有与通配符模式匹配的文件 *:2,*T

通配符*匹配任何内容(任意数量的所有可能字符)
:2,是需要出现在文件/目录名称中的字符。
冒号:是需要转义的特殊字符,因此形式为\:2,.
文件/目录名称需要以T.

匹配的文件名将是

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T
Run Code Online (Sandbox Code Playgroud)


Áng*_*gel 9

正如其他人所指出的,这将以长格式列出,文件包含:2,并以T

这看起来像是在 Maildir 文件夹中搜索已删除(已删除)的文件。然而,为了健壮性,它应该*在最后有另一个。可以添加具有较晚字母位置的新标志,例如 Dovecot 在末尾添加另一个具有文件大小的字段。