パス名展開の一覧
| 記法 | 意味 | 例 |
|---|---|---|
| * | 0文字以上の任意の文字列 | *.txt, file* |
| ? | 任意の1文字 | file?.txt |
| [...] | 括弧内のいずれかの1文字 | file[12].txt |
| [a-z] | 指定した範囲のいずれか1文字 | file[1-3].txt |
| [!...] | 括弧内に含まれないいずれか1文字 | file[!1].txt |
*(アスタリスク)
0文字以上の任意の文字列にマッチします。最もよく使われるワイルドカードです。
# ダミーファイルの作成
touch file.txt file1.txt file10.txt other.md
# .txt で終わるすべてのファイル
ls *.txt
echo '--------------------'
# file で始まるすべてのファイル
ls file*
?(クエスチョンマーク)
任意の1文字にマッチします。0文字(マッチなし)や2文字以上にはマッチしません。
# ダミーファイルの作成
touch file.txt file1.txt file2.txt file10.txt
# file + 任意の1文字 + .txt
# file1.txt, file2.txt にはマッチするが
# file.txt (0文字) や file10.txt (2文字) にはマッチしない
ls file?.txt
[...](ブラケット)
括弧内に指定した文字のいずれか1文字にマッチします。「-」を使った範囲指定や、「!」を使った否定も可能です。
# ダミーファイルの作成
touch file1.txt file2.txt file3.txt file4.txt
# 1 か 3 にマッチ
ls file[13].txt
echo '--------------------'
# 1 から 3 の範囲にマッチ
ls file[1-3].txt
echo '--------------------'
# 1 以外にマッチ
ls file[!1].txt
ブレース展開との違い
ブレース展開({ })は「単なる文字列の生成」ですが、パス名展開は「実在するファイル」を探します。パス名展開では、マッチするファイルが存在しない場合、パターンが展開されずにそのまま残ります。
# ブレース展開:ファイルがなくても文字列を生成する
echo {1..3}.md
echo '--------------------'
# パス名展開:ファイルがない場合はそのまま残る
# (カレントディレクトリに .md ファイルがない場合)
echo *.md