【问题标题】:Why are the results of these two commands different?为什么这两个命令的结果不同?
【发布时间】:2019-12-18 05:44:37
【问题描述】:

这个命令的结果(ls -d [!0-99])已经包含了这个命令(ls -d [!0-100])。但是在我看来,结果是这两个命令应该是一样的。谁能帮我解释一下第二个命令的结果?

jack@DESKTOP-KRIB7TB:~$ ls -d [!0-99]*
a  b  c  d  e  f  g  h  i  j  k
jack@DESKTOP-KRIB7TB:~$ ls -d [!0-100]*
2   25  30  36  41  47  52  58  63  69  74  8   85  90  96  c  i
20  26  31  37  42  48  53  59  64  7   75  80  86  91  97  d  j
21  27  32  38  43  49  54  6   65  70  76  81  87  92  98  e  k
22  28  33  39  44  5   55  60  66  71  77  82  88  93  99  f
23  29  34  4   45  50  56  61  67  72  78  83  89  94  a   g
24  3   35  40  46  51  57  62  68  73  79  84  9   95  b   h

【问题讨论】:

    标签: linux wildcard


    【解决方案1】:

    glob 中的[...] 语法是按字符匹配的,而不是数字范围。例如,[a-c][abc] 相同。一个块中可以有多个范围或单个字符,因此[a-cfh-k][abcfhijk] 相同。

    所以[!0-99][!01234567899] 相同(注意多余的9),而[!0-100][!0100] 相同,因此仅匹配0s 和1s。

    您可以使用ls -d [!0-9]* 列出所有非数字目录,但我不知道是否有一种可靠的方法(使用 glob 和 ls)列出名称中数字大于 100 的目录。

    【讨论】: