我想在一个函数中输入两位和三位数字并输出一个大小写范围,即输入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位数字的大小写范围,然后复制并粘贴为内联代码.