何となくシェルでFizzBuzz問題

今更ながらFizzBuzz問題と言うものを知る。
悪い癖かどうかわからないけど、シェルでやってみた。

#!/bin/sh
for i in `seq 100`;do
  (( i % 15 == 0 )) && echo 'FizzBuzz' && continue
  (( i % 3 == 0 )) && echo 'Fizz' && continue
  (( i % 5 == 0 )) && echo 'Buzz' || echo $i && continue
done

一般的なのはこんなのかな。もっと短くかけないもんかな。

#!/bin/sh
for i in {1..100};do
  echo $( (( i % 3 == 0 )) && echo -n 'Fizz')$( (( i % 5 == 0 )) && echo -n 'Buzz') | sed "s/^$/$i/" 
done

最低なほど遅いw

#!/bin/sh
for i in {1..100};do
  line=$( (( i % 3 == 0 )) && echo -n 'Fizz')$( (( i % 5 == 0 )) && echo -n 'Buzz'); echo ${line:=$i}
done

sed分早くなったがまだ遅い

#!/bin/zsh
for i in {1..100};do
  line=${${$(( i % 3 == 0 ))/1/Fizz}/0/}${${$(( i % 5 == 0 ))/1/Buzz}/0/}; echo ${line:=$i}
done

bashじゃ動かなくてzshなら動いた。外部コマンドは使ってないのでそれなりに早い。