Por que o ponto de interrogação não está funcionando neste globo?

Por que o ponto de interrogação não está funcionando neste globo?

O que estou fazendo de errado no globo abaixo? Parece que deve funcionar de acordo com minha leitura deo manual.

A '?' (não entre colchetes) corresponde a qualquer caractere único.

$ 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)

Responder1

Corresponde ?a um único caractere (como .em uma expressão regular). Você não possui nenhum arquivo que corresponda ao padrão, file.te?xtportanto o padrão permanece sem expansão.

Você pode esperar que funcionasse como uma expressão regular, onde significa "zero ou uma das expressões anteriores". Infelizmente, não existe tal curinga em bash.

... a menos que você habilite a extglobopção shell:

shopt -s extglob

Então o padrão ?(list)corresponderia a zero ou a um dos padrões em list.

$ shopt -s extglob
$ ls file.t?(e)xt
file.text file.txt

informação relacionada