/ / BASH - Globale Ausdrücke mit eckigen Klammern: [... - ...] - bash, shell, unix

BASH - Globale Ausdrücke mit eckigen Klammern: [... - ...] - bash, shell, unix

Ich schreibe hier, weil ich falsch verstanden habeetwas über bash globbing Ausdrücke. Ich habe den POSIX und die Definition dieses speziellen Ausdruckstyps gelesen (die mit den eckigen Klammern), und während des Tests habe ich diesen Test gemacht:

bash-3.2$ ls
a.out    c.cou    tab_maker.c

bash-3.2$ ls [!c-t]
ls: [!c-t]: No such file or directory

bash-3.2$ ls [!c-t]*
a.out

bash-3.2$ ls [!c-to]*
a.out

bash-3.2$ ls [!cv-to]*
a.out    tab_maker.c

bash-3.2$

Was ich nicht verstehe ist, wie Bash diesen Befehl interpretiert? Wenn ich es tue ls [!c-t]*, bash fängt nur a.out auf (was für mich logisch ist), aber warum fängt tab_maker.c beim letzten Test ein? Gibt es etwas, das ich wissen sollte oder ist es nur undefiniertes Verhalten?

Antworten:

1 für die Antwort № 1

Nichts passt zusammen [v-t], da sich keine Zeichen dazwischen befinden v und t. [!cv-to] ist daher äquivalent zu [!co].

Versuchen [t-v] stattdessen.