このグロブでは疑問符が機能しないのはなぜですか?

このグロブでは疑問符が機能しないのはなぜですか?

下のglobで何が間違っているのでしょうか?私の読み方によると、動作するはずですマニュアル

「?」 (括弧で囲まれていない) は任意の 1 文字に一致します。

$ 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

?、(正規表現のように) 1 つの文字と一致します.。パターンに一致するファイルがないfile.te?xtため、パターンは展開されません。

正規表現のように機能し、「前の表現の 0 個または 1 個」を意味すると予想したかもしれません。残念ながら、 にはそのようなワイルドカードはありませんbash

...extglobシェル オプションを有効にしない限り:

shopt -s extglob

すると、パターンは?(list)内のパターンの 0 個または 1 個と一致しますlist

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

関連情報