今回は文字列を生成する
「ブレース展開
(brace expansion)」
を学んで行こう!
文字列を作れると
どんなことができるんだろう?
ブレース展開は
以下のように書くよ
{要素1,要素2...}
これは次のように展開されるんだ
要素1 要素2 ...
普通にスペースで区切って書けば良くないかな?
ブレース展開は他の文字列と組み合わせて力を発揮するんだ次の例をみてみよう
cp my-file{,.backup}
この書き方で
cp
が動くのかな?引数は最低2つ必要だよね?確かに引数が1つしかないように見えるよねでもブレース展開の働きで次のように展開されるんだ
cp my-file my-file.backup
- 1つ目の要素は空文字なので、
そのまま my-file
になる - 2つ目の要素は
.backup
なので、これが my-file
に追加されてmy-file.backup
になる
結果としてこのコマンドは
my-file
をコピーしてmy-file.backup
を作ってくれるよなるほど!元のファイル名を活かした指定ができるんだね!
以下のように指定することで連続した範囲を展開できるんだ数字でもアルファベットでも使えるよ
{文字1..文字2}
どんなふうに使えるのかな?
こんな例を試してみようか
touch chapter-{0..9}{0..9}
わっ!
chapter-00
からchapter-99
まで100 個のファイルができてる!これを使えば名前が規則的なファイルを一気に作れるんだ
1回のコマンド実行でできてしまうんだね!
今度はアルファベットの例をみてみよう
mkdir project-{a..d}
これは
project-a
からproject-d
までの4つのディレクトリを作るよ規則が分かれば一つずつ引数を指定しなくてもいいんだね!
範囲指定が数値の場合「刻み(step)」を 指定できるんだこんな感じだよ
touch {0..20..5}
これは「 に展開されるよ
0
から始まり、20
で終わる、5
刻みの数値」具体的には
0
, 5
, 10
, 15
, 20
の5つになるようわぁ!こんな使い方ができるんだ!
今回学んだ「ブレース展開」って 「ワイルドカード」と 似ている気がするよ
確かに似ている部分もあるけどワイルドカードは基本的に存在するファイルにしか適用できないんだ
なので「ブレース展開」は コマンド実行時点では存在していないファイル名などを指定する場合に使われるよ例えば 「移動先」や「コピー先」で 使われるんだ
mv
や cp
などの状況に応じて使い分けたり組み合わせたりするといいよ