助け合いフォーラム

Essentials

Linux Essentials(Ver1.6)
問題ID : 2623
問題を開く
カレントディレクトリに、以下の5つのファイルがある。

 file1.txt  file2.txt  file303.txt  file004.txt  fileA.txt

コマンド「ls file?.txt」を実行した際に表示されるファイルはどれか。

正解

file1.txt、file2.txt、fileA.txt

解説

コマンドに指定できる便利なメタキャラクタには以下のようなものがあります。


設問の「?」は任意の1文字(英字数字問わず)を意味します。

以上より正解は
・file1.txt、file2.txt、fileA.txt
です。

例)「file<任意の一文字>.txt」のファイルを表示する


「?」は二つ以上重ねることもでき、任意の文字数に対応できます。
3文字のファイルなどを扱いたい場合は以下のようにします。

例)「100.txt」など、「<3文字>.txt」のファイルを確認する

 → この場合、「1.txt」「10.txt」などは含まれません。

その他の選択肢は誤りです。

参考

【ワイルドカード(グロビング)】
分野「コマンドラインの基本」では、シェルによって解釈される特別な文字、メタキャラクタを学習しました。


上記以外にも、コマンドに指定できる便利なメタキャラクタがあります。


例)末尾が「.txt」で終わるファイルを確認する

 → 「1.txt」「100.txt」など、文字数に関わらず末尾が「.txt」のファイルが対象になります。

例)「100.txt」など、「<3文字>.txt」のファイルを確認する

 → この場合、「1.txt」「10.txt」「10000.txt」などは含まれません。

例)先頭が数字で始まり、「.txt」で終わるファイルを確認する

 → 先頭に数字(0~9の文字)が1回以上登場するファイルが対象になります。「a.txt」などは対象外です。

これらのメタキャラクタは、任意の文字列を表す、という意味でワイルドカードともいいます。また、これらのメタキャラクタ(ワイルドカード)を使って条件を指定する方法をグロビング(globbing)といいます。
上に戻る

問題の答えが実機で試した内容と異なる。

投稿日 2026/01/22

表題の通り、問題の答えが、実機で実際に同じ状態を作って実行した場合の内容が食い違ったため、質問させてください。
自分の端末は、
・ping-tを回答している端末はMacOS 26.2のSafari。
・実機はLinux Mint 22, bash

カレントディレクトリに、以下の5つのファイルがある。
 file1.txt  file2.txt  file303.txt  file004.txt  fileA.txt
コマンド「ls file?.txt」を実行した際に表示されるファイルはどれか。

と言う問題において自分は、コマンドがエラーになる。と思い選択しましたが、答え合わせの時に不正解となりました。
ワイルドカードは理解しているのですが、?は文字列として認識されない(エスケープしていないから)と思い、エラーになると回答しました。
解説を見ましたが、どうしても理解できなかったので、実機において、
$ touch file1.txt file2.txt file303.txt file004.txt fileA.txt
を実行して設問と同じ状況を作り、設問と同じく、
$ ls file?.txt
を実行しました。
返ってきた答えは、
ls: 'file?.txt' にアクセスできません: そのようなファイルやディレクトリはありません
でした。

他のLinux Mint 23端末のbashでも試してみましたが、結果は同じでした。
問題が間違っているのか、自分の環境が間違っているのか、自分はどちらが正しいのかがわからなくて、教えていただきたいです。

2026/01/22 23:30

自分の Ubuntu 環境では解説の通りでした。
どちらかというと、markun_D さんの出力が「マッチするファイルが存在しない」時のエラーメッセージなので、ちゃんとそこにファイルがあるのかが気になりました。 ls だけやった場合と ls file?.txt をやった場合の結果ってどうなるでしょうか?

$ mkdir 2623
$ cd 2623
$ ls <<< ディレクトリの中は空っぽ
$ ls file?.txt
ls: cannot access 'file?.txt': No such file or directory <<< ファイルが存在しないので、このエラーが出てる
$ touch file1.txt file2.txt file303.txt file004.txt fileA.txt
$ ls
file004.txt  file1.txt  file2.txt  file303.txt  fileA.txt
$ ls file?.txt <<< ファイルがある場合はちゃんと出る
file1.txt  file2.txt  fileA.txt
$ rm * <<< ここでまたファイルを削除してみる
$ ls file?.txt
ls: cannot access 'file?.txt': No such file or directory <<< 同じエラーメッセージ


コメント

m markun_D

2026/01/23 11:58

返信ありがとうございます。 実際に上記コマンドを試してみましたが、結果は変わらずでした。 この場合、どうなんでしょう... 何か自分が操作をミスってるとかなんですかね...? ~$ mkdir 2623 ~$ cd 2623 ~/2623$ ls ~/2623$ ls file?.txt ls: 'file?.txt' にアクセスできません: そのようなファイルやディレクトリはありません ~/2623$ touch file1.txt file2.txt file303.txt file004.txt fileA.txt ~/2623$ ls file1.txt  file2.txt  file303.txt  file004.txt  fileA.txt ~/2623$ ls file?.txt ls: 'file?.txt' にアクセスできません: そのようなファイルやディレクトリはありません ~/2623$ rm * ~/2623$ ls file?.txt ls: 'file?.txt' にアクセスできません: そのようなファイルやディレクトリはありません

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?