# shellcheck    shell=sh            disable=SC3043,SC2164     # xrc

# x seq 1:10 '{ print e ** 2; }'
# x seq 1:10 '"$((e**2))"'
# x seq 1:10 eval 'printf "%s\n" "$((e**2))"'
# pow(){ printf "%s\n" "$((e**2))"; }; x seq 1:10 pow

# x seq awk 1:10 '{ print (A+=10) "\t" e }; BEGIN{ A=1; }'

___x_cmd_seq___main(){
    if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then x help -m seq; return;
    fi

    local s="$1";   shift
    case "$1" in
        '')         set -- eval 'printf "%s\n" "$e"' ;;
        \"*\")      set -- eval printf '%s\\n' "$1" ;;
        \{*)        ___x_cmd_seq___awk "$s" "$@"; return ;;
    esac

    local start=1; local end; local sep=1
    case "$s" in
        awk)            ___x_cmd_seq___awk "$@"; return ;;

        *:*:*:*)        ;; # fail
        *:*:*)          start="${s%:*:*}";  end="${s#*:*:}"
                        sep="${s#*:}";      sep="${sep%:*}"
                        ;;
        *:*)            start="${s%:*}";    end="${s#*:}"
                        [ "$start" -le "$end" ] || sep=-1
                        ;;
        *)              end="$s"
                        ;;
    esac

    if [ "$start" -le "$end" ]; then
        [ "$sep" -gt 0 ] || { x:error "Expect sep > 0 but get $sep"; return 1; }
        local e="$start"; while [ "$e" -le "$end" ]; do "$@";   e=$((e + sep)); done
    else
        [ "$sep" -lt 0 ] || { x:error "Expect sep < 0 but get $sep"; return 1; }
        local e="$start"; while [ "$e" -ge "$end" ]; do "$@";   e=$((e + sep)); done
    fi

}


___x_cmd_seq___awk(){
    ___x_cmd_cmds_awk -v range="${1:?Provide range}" "function iter(e) ${2:-"{ print e; }"}"'

function seq_parse(  seqstr,       l, a, b, e, d ){
    l = split(seqstr, a, ":")
    if (l == 1)      {          begin =   1 ;   delta =   1 ;   end = a[1];     }
    else if (l == 2) {          begin = a[1];   delta =   1 ;   end = a[2];     }
    else             {          begin = a[1];   delta = a[2];   end = a[3];     }
}


BEGIN{
    seq_parse( range )
    for (e=begin; e<=end; e+=delta) iter( e )
}
'

}

