Почему в этом шаре не работает вопросительный знак?

Почему в этом шаре не работает вопросительный знак?

Что я делаю неправильно в глобе ниже? Похоже, что это должно работать в соответствии с моим прочтениемруководство.

Знак «?» (не в скобках) соответствует любому отдельному символу.

$ 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

Связанный контент