連続する数列をハイフンでまとめるピュアシェルスクリプト - ダメ出し Blog

2013-11-28(Thu) [sh][shell] [更新履歴]

Twitter の俺の TL にこんなネタが流れてきた。現実逃避にはもってこいのネタ。

真の shellist たるもの、外部コマンドに頼ってはいけない(適当)。 というわけで、ピュアシェルスクリプトをどうぞ。

read i;s=${i%% *};let p=x=s-1;for n in $i x;do((n-p-1))&&{((p-x))&&o=$o-$p;o=$o,\ $n;x=$n;};p=$n;done;o=$s${o#-$s};echo ${o%, x}.

…ツイート用に 140文字以内に収めるのに必死ですみません。 ふつうの sh だと流石に無理(?)なので、bash, ksh 前提です。 ちなみに、負数を与えても大丈夫です。

インデントして少し見易くしたのが以下。超適当ですな。

#!/bin/bash
# or
#!/bin/ksh

read i
s=${i%% *}
let p=x=s-1


for n in $i x; do
  ((n-p-1)) && {
    ((p-x)) && o=$o-$p
    o=$o,\ $n
    x=$n
  }
  p=$n
done

o=$s${o#-$s}
echo ${o%, x}.