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