1.02.2基礎
現在のディレクトリにはlog1.txt、logA.txt、log10.txtがある。
logに続く文字がちょうど1文字の.txtだけをlsへ渡す。
適切なファイル名パターンはどれか。
× 不正解
シェルのファイル名展開で?は任意のちょうど1文字に一致する。*は0文字以上なので条件が広い。
詳細解説
正しい
log?.txt?は任意の1文字に一致し、log1.txtとlogA.txtへ一致する。
正しい。?が1文字だけを受け持つため、数字か文字かを問わず1文字の2ファイルへ一致する。
誤り
log*.txt*は0文字以上に一致するため、log10.txtも含む。
誤り。*は10という2文字にも一致するため、選択範囲が要件より広い。
誤り
log[0-9].txt数字1文字だけに限定し、logA.txtを含まない。
誤り。[0-9]は文字種を数字へ限定するので、長さは合ってもlogA.txtを除外する。
誤り
log??.txt任意の2文字を要求するため、log10.txtだけに一致する。
誤り。2つの?は2文字を要求するため、1文字の名前ではなくlog10.txtへ一致する。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); touch "$tmp/log1.txt" "$tmp/logA.txt" "$tmp/log10.txt"; (cd "$tmp" && printf '%s\n' log?.txt); rm -rf "$tmp"期待される結果
log1.txt
logA.txt理解のポイント
- ?は1文字
- *は0文字以上
- globはシェルが展開
確認時の注意
- 確認環境: Bash 5.x / 一時ディレクトリ
基礎のおさらい
シェル展開
globは通常、コマンドが起動する前にシェルによって一致するファイル名へ展開される。
一致しない場合
Bashの既定では一致がないパターンがそのまま残るため、スクリプトでは設定や事前確認も重要になる。
問題IDKL-101-398
確認環境Bash 5.x / 一時ディレクトリ
最終技術確認2026-08-13
誤り・権利侵害を報告