Lから始まるLinux

2章28話
ワイルドカード
2章29話 ブレース展開
もくじ
2章30話
クォート
ブレース展開
若木 しげる
今回は文字列を生成する 「ブレース展開 (brace expansion)」 を学んで行こう!
若木 みどり
文字列を作れると どんなことが できるんだろう?
基本的な使い方
若木 しげる
ブレース展開は 以下のように書くよ
{要素1,要素2...}
若木 しげる
これは次のように展開されるんだ
要素1 要素2 ...
若木 みどり
これって普通に要素をスペースで区切って書けばいいんじゃないかな?
若木 しげる
ブレース展開単独だとその通りだけどブレース展開は他の文字列と組み合わせて力を発揮するんだ次の例をみてみよう
cp my-file{,.backup}
若木 みどり
この書き方でcp が動くのかな?引数は最低2つ必要だよね?
若木 しげる
確かに引数が1つしかないように見えるよねでもブレース展開の働きで次のように展開されるんだ
cp my-file my-file.backup
  1. 1つ目の要素は空文字なので、そのまま my-file になる
  2. 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つになるよ
若木 みどり(驚き)
うわぁ!こんな使い方ができるんだ!
まとめ
若木 みどり
今回学んだ「ブレース展開」って「ワイルドカード」似ている気がするよ
若木 しげる
確かに似ている部分もあるけどワイルドカードは基本的に存在するファイルにしか適用できないんだ
若木 しげる
なので「ブレース展開」コマンド実行時点では存在していないファイル名などを指定する場合に使われるよ
若木 しげる
例えば mvcp などの「移動先」「コピー先」使われるんだ
若木 みどり
「ワイルドカード」「ブレース展開」にはそういう使い分けがあるんだね!
若木 しげる
状況に合わせて使い分けたり組み合わせたりするといいよ!