Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック第2章3節練習問題その1

練習2.3.a ブレース展開

次の出力

1.txt 1.bash 2.txt 2.bash 3.txt 3.bash 4.txt 4.bash 5.txt 5.bash

2.txt 2.bash 4.txt 4.bash 6.txt 6.bash 8.txt 8.bash 10.txt 10.bash

山田 山 上田 上

が得られるような echo の引数を考える問題だった。上から順に

echo {1..5}{.txt,.bash}
echo {2,4,6,8,10}{.txt,.bash}
echo {山,上}{田,}

でできる。{2,4,6,8,10} は {2..10..2} と書いてもよいらしい。

 

練習2.3.b ワイルドカードとファイルグロブ

この問題を読んで初めて、問題15で出てきた ? の用法の意味が分かった。あれはワイルドカードと呼ばれるまた別の記号だった。ls *.png のコマンドで出てきた * というのもワイルドカードの一種である。*.png のような文字列はグロブと呼ばれる。グロブの対象はディレクトリ名やファイル名のみで、中身までは対象にならない。

まずtouch {1..100}.{txt,bash} でファイルを生成した後、所定の出力が得られるように ls の引数を考える問題だった。出力は

1.txt  2.txt  3.txt  4.txt  6.txt  7.txt  8.txt  9.txt

15.bash  15.txt  25.txt  65.bash  65.txt

1.bash  1.txt  3.bash  3.txt  4.bash  4.txt  5.bash  6.bash  6.txt  7.bash  7.txt  8.bash  8.txt

である。正解は

ls ?.txt
ls [126][5].*
ls [!29].*

である。