
Was mache ich falsch im Glob unten? Es sieht so aus, als ob es nach meiner Lektüre funktionieren solltedas Handbuch.
Ein „?“ (nicht in Klammern) entspricht jedem einzelnen Zeichen.
$ touch file.txt file.text
$ ls file.*
file.text file.txt
$ ls file.te?xt
ls: cannot access 'file.te?xt': No such file or directory
$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Antwort1
Das ?
entspricht einem einzelnen Zeichen (wie .
in einem regulären Ausdruck). Sie haben keine Datei, die dem Muster entspricht, file.te?xt
daher bleibt das Muster unerweitert.
Sie haben vielleicht erwartet, dass es wie in einem regulären Ausdruck funktioniert, wo es „Null oder Eins des vorherigen Ausdrucks“ bedeutet. Leider gibt es in kein solches Platzhalterzeichen bash
.
… sofern Sie nicht die extglob
Shell-Option aktivieren:
shopt -s extglob
Dann würde das Muster ?(list)
mit keinem oder einem der Muster in übereinstimmen list
.
$ shopt -s extglob
$ ls file.t?(e)xt
file.text file.txt