Warum funktioniert das Fragezeichen in diesem Glob nicht?

Warum funktioniert das Fragezeichen in diesem Glob nicht?

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?xtdaher 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 extglobShell-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

verwandte Informationen