在bash中生成案例范围

我想在一个函数中输入两位和三位数字并输出一个大小写范围,即输入33和66以及输出3 [3-9] | [4-5] [0-9] | 6 [0-6]或输入33和666以及输出3 [3-9] | [4-9] [0-9] | [1-5] [0-9] [0-9] | 6 [0-5] [0-9] | 66 [0-6]

有什么想法如何?谢谢!

最佳答案 只想分享最终代码:
https://gist.github.com/zaydek/1627329f88c444f6d71d5cbc0cda616f 🙂

function enc {

    a=${1: -3:1}; b=${1: -2:1}; c=${1: -1}
    d=${2: -3:1}; e=${2: -2:1}; f=${2: -1}

    if   (( $[a] < $[d] )); then

        if   (( $b$c == 00 && $e$f == 99 )); then echo [$a-$d][0-9][0-9]
        elif (( $b$c == 00 )); then if (( $[a+1] < $d )); then echo [$a-$[d-1]][0-9][0-9] "|"; echo $(enc $[d]00 $d$e$f)
                                                          else echo $a[0-9][0-9] "|"; echo $(enc $[a+1]00 $d$e$f); fi

        else echo $(enc $a$b$c $[a]99) "|"; echo $(enc $[a+1]00 $d$e$f); fi

    elif (( $b < $e )); then

        if   (( $c == 0 && $f == 9 )); then echo $a[$b-$e][0-9]
        elif (( $c == 0 )); then if (( $[b+1] < $e )); then echo $a[$b-$[e-1]][0-9] "|"; echo $(enc $a$[e]0 $d$e$f)
                                                       else echo $a$b[0-9] "|"; echo $(enc $a$[e]0 $d$e$f); fi

        else echo $(enc $a$b$c $a$[b]9) "|"; echo $(enc $a$[b+1]0 $d$e$f); fi

    else

        if (( $c == $f )); then echo $a$b$c
        else echo $a$b[$c-$f]; fi; fi

}

function int {

    if [[ $1 = *.* ]]; then

        integer=${1%.*}
        decimal=${1#*.}

        if (( ${decimal:0:1} >= 5 )); then integer=$[integer+1]; fi

         echo $integer
    else echo $1; fi

}

function cse {

    minimum=$(int $(echo $1 $2 | awk '{ print ($1/$2)*( 90) }'))
    maximum=$(int $(echo $1 $2 | awk '{ print ($1/$2)*(110) }'))

    echo $(enc $minimum $maximum)

}

cse $1 $2

cse接受两个输入,将它们转换为小数,并将每个输入从一个范围中倍增,即90和110为-10%和10%误差范围,然后将最小和最大输出作为输入传递给enc,这是一个递归函数,生成案例范围语法(使用语法优化).

请注意,bash似乎不会按预期或预期处理案例范围的表达式.但是,此代码可用于生成所有2到3位数字的大小写范围,然后复制并粘贴为内联代码.

点赞