ブレース展開について

コンマ区切りの文字列

ブレース展開にコンマ区切りの文字列を指定するとコンマで分割された文字に展開されます。

code
echo {1,2,3}
echo {a,b,c}
stdout
1 2 3
a b c
code
echo {111,222,333}
echo {abc,bcd,cdf}
stdout
111 222 333
abc bcd cdf

ブレース展開の前と後に指定した文字列はそれぞれ展開された文字列に結合されます。

code
# 前置部分(test-)と後置部分(.txt)を指定
# それぞれ展開された文字列の前後に結合される
echo test-{1,2,3}.txt
echo test-{a,b,c}.txt
stdout
test-1.txt test-2.txt test-3.txt
test-a.txt test-b.txt test-c.txt

複数のブレース展開を組み合わせることができます。

code
# ブレース展開を組み合わせ
echo {1,2}{a,b,c}
stdout
1a 1b 1c 2a 2b 2c

シーケンス式

ブレース展開にシーケンス式を指定すると連続する値に展開されます。

code
echo {1..10}
echo {10..1}
stdout
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
code
echo {a..z}
echo {z..a}
stdout
a b c d e f g h i j k l m n o p q r s t u v w x y z
z y x w v u t s r q p o n m l k j i h g f e d c b a

シーケンス式では「開始..終了」の後に「..増分」を指定することができ、増分で指定した間隔飛びの連続した値に展開されます。

code
# シーケンス式は増分を指定できる
# 以下は 1 ~ 31 までを 増分 2 で展開する
echo {1..31..2}
# 以下は 31 ~ 1 までを 増分 2 で展開する
echo {31..1..2}
# 以下は A ~ Z までを 増分 2 で展開する
echo {A..Z..2}
stdout
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
31 29 27 25 23 21 19 17 15 13 11 9 7 5 3 1
A C E G I K M O Q S U W Y

シーケンス式では開始または終了のどちらかに 0 で始まる数字を指定した場合、前が 0 で埋められた数字に展開されます。

code
# 開始または終了のどちらかが 0 で始まる数字の場合
echo {1..09}
echo {01..9}
echo {01..09}
echo {01..10}
echo {000..10}
echo {000..100..10}
stdout
01 02 03 04 05 06 07 08 09
01 02 03 04 05 06 07 08 09
01 02 03 04 05 06 07 08 09
01 02 03 04 05 06 07 08 09 10
000 001 002 003 004 005 006 007 008 009 010
000 010 020 030 040 050 060 070 080 090 100

ブレース展開の使用例

実際に使えそうなブレース展開を使用したサンプルを考えてみました。

code
# 00.txt ~ 03.txt を作成
touch {01..03}.txt
ls
stdout
01.txt
02.txt
03.txt
code
echo 'test' > test.txt
# test.txt を test.txt.bk にコピー
cp test.txt{,.bk}
ls
stdout
test.txt
test.txt.bk