bashのtestコマンドをろくに読んでいなかった

bashのtestコマンドをろくに読んでいなかった

test中でand(-a)とかor(-o)できたんだな。

$ [ 5 -eq 5 ] && echo OK
OK
$ [ 5 -eq 5 -a 3 -eq 3 ] && echo OK
OK
$ [ 5 -eq 5 -a 3 -eq 3 -a 2 -eq 2 ] && echo OK


testコマンドとしての仕組みを見ると単に引数を演算子として解釈しているだけか。
これとおなじ。

$ rungcc 'if (5 == 5 && 3 == 3 && 2 == 2) {printf("OK\n");}'
OK

これを利用してfizzbuzzを書くとかなりすっきりする。

$ for i in `seq 100`; do j=$(($i%3));k=$(($i%5));[ $j -eq 0 ]&&echo -n fizz;[ $k -eq 0 ]&&echo -n buzz; [ $j -ne 0 -a $k -ne 0 ]&&echo -n $i;echo;done

最近になって思うんだがbashは"や'の扱いが難しい。というかスペースという特殊文字が一番扱いづらい。
このへんで一度なんか書くか。

おお、もしかすると 変数が空だったら代入する${ := } を使うともすこし短くなるな(悪い癖)

$ for i in `seq 100`; do j=;[ $((i%5)) -eq 0 ]&&j=buzz;[ $((i%3)) -eq 0 ]&&j=fizz$j;echo ${j:=$i};done

101文字かおしかったな。

文字列比較にすると96文字になるな。これだから型の無い言語は(笑

for i in `seq 100`;do j=;[ $((i%5)) = 0 ]&&j=buzz;[ $((i%3)) = 0 ]&&j=fizz$j;echo ${j:=$i};done