103.3標準
現在のディレクトリにreport1.log、report9.log、report10.logがある。
reportの直後が数字1文字だけの.logファイルに一致させる。
適切なシェルglobはどれか。
× 不正解
シェルglobの[0-9]は、その位置にある数字1文字へ一致する。*や?とは一致する文字数と範囲が異なる。
詳細解説
誤り
report*.log*は0文字以上に一致するため、report10.logにも一致する。
数字の桁数を限定せずreport10.logにも一致する。
誤り
report?.log?は任意の1文字なので、英字など数字以外にも一致する。
1文字には限定するが英字などにも一致する。
正しい
report[0-9].log角括弧式が数字1文字だけに一致し、2桁のreport10.logを除外する。
正解。reportの直後を数字1文字だけに限定する。
誤り
report[0-9]*.log数字1文字の後に*が続くため、2桁以上にも一致する。
数字の後の*が追加文字を許し、2桁以上にも一致する。
実際に確かめる
一時的な検証環境で実行できる例です。
LAB_DIR=$(mktemp -d)
touch "$LAB_DIR/report1.log" "$LAB_DIR/report9.log" "$LAB_DIR/report10.log"
printf '%s
' "$LAB_DIR"/report[0-9].log | sed 's!.*/!!'
rm -r "$LAB_DIR"期待される結果
report1.log
report9.log理解のポイント
- [0-9]は数字1文字
- ?は種類を問わず1文字
- *は0文字以上
確認時の注意
- 確認環境: Bash 5.2
基礎のおさらい
globと正規表現
シェルglobは正規表現とは構文が異なり、*は直前要素の繰り返しではなく任意文字列を表す。
展開のタイミング
globはコマンド実行前にシェルが一致するパス名へ展開する。
問題IDKP-103-061
確認環境Bash 5.2
最終技術確認2026-08-12
誤り・権利侵害を報告