むかし書いたネタを放出
社内の勉強会で使った資料や、個人的なメモなど、公開できそうなものを小出しにしてゆきます。
ワイルドカード
普通はファイル名の指定に使うけど、case 文のパターンにも使える。
$ ls bar foo foobar food fool foot $ ls foo? # 1 文字にマッチ food fool foot $ ls foo* # 0 文字以上にマッチ foo foobar food fool foot $ ls foo[a-n] # 範囲内の 1 文字にマッチ food fool $ ls foo[!a-n] # 範囲外の 1 文字にマッチ foot $ ls ?oo[a-n]* # 上記の組み合わせ foobar food fool
いつ誰が評価するのか
Unix ではシェルが評価し*1、DOS では各コマンドが評価する。
シェルはワイルドカードをいつ評価するのか?
$ ls bar foo foobar food fool foot $ wildcard=foo? $ echo $wildcard food fool foot $ cd / $ echo $wildcard # ここで評価すると foo? # マッチしなかった
コマンドに引数として渡す際に評価している。
ちなみに変数に入れたワイルドカードそのものを見たいときは、どうするか?
$ ls bar foo foobar food fool foot $ wildcard=foo? $ echo $wildcard food fool foot # 展開されてしまった $ echo "$wildcard" foo?
文字列にしてやればいい。
マッチしなかったとき
上の例でも見たように、ワイルドカードにマッチするファイルがなかった場合は、その文字列がそのまま使用される。
$ for f in foo??; do rm $f; done rm: foo??: No such file or directory
マッチしなくても for の中は 1 回 実行される。