
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?xt
portanto 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 extglob
opçã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