読者です 読者をやめる 読者になる 読者になる

bashの{}を使った引数展開

こういうの。

$ echo {aa,bb}.{1..3}
aa.1 aa.2 aa.3 bb.1 bb.2 bb.3

すごい便利なんだけど意外と知らない人多い。


シェルスクリプトで数値をカウントするのにこういう書き方もできますが、

$ for ((i=0;$i<10;i++));do echo $i;done
0
1
2
...

このくらいならこっちのが簡単。

$ for i in {0..9};do echo $i;done
0
1
2
...

アルファベットにも使えるし、
$ for i in {a..z};do echo $i;done
コマンドの一部としていろいろ役に立ちます。
$ snmpget -v2c -c public 192.168.0.1 1.3.6.1.2.1.2.2.1.10.{1..10}


冗長構成のメール、Web、DNSサーバの全てに連続してログインするならこんな感じ。
$ for i in {mail,web,dns}_sv{1,2};ssh $i;done
階層的なディレクトリ構造も一気に作れます。
$ mkdir -p src/test{0..2}/{etc,bin,bak}



ただあんまムチャな展開をするとメモリ食いまくるので、スクリプトで動的に範囲を決める時などは特に気をつけましょう。


追記
{0,1,2}はいいんですが{0..10}といった書き方、手近なsolarisbashは対応してませんでした。スクリプトに組み込んだりはやめときましょう。