为什么这两个命令的结果不同?

时间:2019-08-11 06:13:27

标签: linux wildcard

此命令的结果(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

1 个答案:

答案 0 :(得分:2)

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

因此[!0-99][!01234567899]相同(请注意冗余9),而[!0-100][!0100]相同,因此仅匹配{{ 1}}和0

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