ブレース展開とコマンド展開
コマンドラインの展開についてメモ。
シェルは入力されたコマンドを実行する前に受け取った文学列を以下の順番で展開し、処理をする。
・ブレース及びチルダ展開
・変数及び算術式展開
・コマンド置換
・単語分割
・パス名展開
ここではブレース展開とコマンド展開について書いておく。
ブレース展開
ブレースとは、文字列の前部や後部に共通する文字列があった場合に省略して1つにまとめて
書くことができる機能のこと。実行時に複数の文字列に直す機能をブレース展開という。
{}(ブレース)の外側前部をプリアンブル、後部をポストスクリプトという。共に省略可能。
以下は名文学列がブレースにより解釈された上で出力されている。

1つの階層下に複数のディレクトリを作成したいとき、以下の例が便利かもしれない。
ブレース内で指定した、複数の名前のディレクトリが作成されている。

当然、ディレクトリではなくファイル作成時にも適用できる。
一括してパーミッションを変更したり、とか。
$ touch test_{01,02,03,04,05}
$ ls | grep test_
test_01
test_02
test_03
test_04
test_05
$
$ chmod 664 test_{01,02,03,04,05}
$ ls -l | grep test_
-rw-rw-r– 1 testuser 503 0 Jan 2 12:47 test_01
-rw-rw-r– 1 testuser 503 0 Jan 2 12:47 test_02
-rw-rw-r– 1 testuser 503 0 Jan 2 12:47 test_03
-rw-rw-r– 1 testuser 503 0 Jan 2 12:47 test_04
-rw-rw-r– 1 testuser 503 0 Jan 2 12:47 test_05
コマンド展開
コマンド展開は、`(バッククォート)で囲まれた部分をコマンドとみなして実行する。
スクリプト内でもよく利用することがあるだろう。
書式 $(command)でも同様となるが、両者にはバックスラッシュによるエスケープ処理に
違いがある。
バッククォートでのコマンド展開では、バックスラッシュによるエスケープ処理が行われるが、
$(command)の場合はバックスラッシュを特別扱いせず、文字列そのものとして扱う。
以下の例では、dateコマンドの実行においては両者に違いはなく、バックスラッシュが
入った時はその差が表れている。
