計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

zshで連番生成

連番生成方法

zshでは{1..10}とすることで連番が生成できる。これはbashでも同じ。{01..10}と書くことで二桁の連番にも対応できる。

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

$ echo {01..10}
01 02 03 04 05 06 07 08 09 10

bashでは{a..g}とすることでアルファベットも同じように展開できる。zshの場合はデフォルトの設定ではできない。

$ echo {a..d}
{a..d}

brace_cclの設定を行うとアルファベットも展開できるようになる。

brace_ccl

設定方法

~/.zshrcなどにsetopt brace_cclと書くだけ
これで上で説明した{ .. }の形とハイフンを使った{ - }''の形で連番が生成できるようになる { .. }{ - }''では少し挙動が異なる

{ .. }を使う

上に書いたように数値に関してはbrace_cclを設定しなくても元から連番が生成できる
アルファベットの場合環境によって違う?

zsh 5.0.6 (x86_64-unknown-cygwin)

$ echo {a..d}
a b c d

Cygwinでバージョン5.0.6だと連番のように展開される

zsh 5.0.2 (x86_64-unknown-linux-gnu)

$ echo {a..d} 
. a d

Linuxのバージョン5.0.2のものだとカッコの中の文字列がソートされて展開される

この違いはよくわからない

{ - }を使う

$ echo {1-9}
1 2 3 4 5 6 7 8 9

$ echo {1-10} 
0 1

$ echo {31-42} 
1 2 3 4

$ echo {a-d}
a b c d 

{ - }の場合の挙動は上の例を見てもらうとわかりやすい {1-10}1 ~ 10になる。これがソートされて重複しないように展開される
{31-42}31 ~ 42ではない。31 ~ 42と見なされる
アルファベットは1文字なので問題ない