
Что я делаю неправильно в глобе ниже? Похоже, что это должно работать в соответствии с моим прочтениемруководство.
Знак «?» (не в скобках) соответствует любому отдельному символу.
$ 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)
решение1
Соответствует ?
одному символу (как .
в регулярном выражении). У вас нет файла, соответствующего шаблону, file.te?xt
поэтому шаблон остается неразвернутым.
Вы могли ожидать, что это будет работать как в регулярном выражении, где это означает "ноль или одно из предыдущего выражения". К сожалению, в . такого подстановочного знака нет bash
.
... если вы не включите extglob
опцию оболочки:
shopt -s extglob
Тогда шаблон ?(list)
будет соответствовать нулю или одному из шаблонов в list
.
$ shopt -s extglob
$ ls file.t?(e)xt
file.text file.txt