1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
function compact_number_list() {
    echo -n '[ '
    while (($# > 0));do
        if (($# >= 3)) && (($2 - $1 == $3 - $2));then
            local d=$(($2 - $1))
            echo -n "[ $1 "
            shift 2
            while (($# >= 2)) && (($2 - $1 == d));do
                shift
            done
            echo -n "$1 "
            ((d != 1)) && echo -n "$d "
            echo -n '] '
        else
            echo -n "$1 "
        fi
        shift
    done
    echo ']'
}