Arbitrary permutation and combination script

#!/bin/bash
# permutation_combination.sh

# Version: 2.0
# Author : YongYe <complex.invoke@gmail.com>

arg0=-1
argv=${3}
number=${2}
eval ary=({1..${1}})
length=${#ary[@]}
percom(){ nsloop i ${1} number${2} ${3} ${4} ${5}; }
invoke(){ echo $(percom ${argu} nsloop -1) prtcom $(percom ${argu}); }
permut(){ echo -n "${1} arg${i} ${2} "; (( ${#} != 0 )) && echo -n " length "; }
combin(){ (( ${#} != 0 )) && echo -n "${1} arg$((i+1)) arg${i} length " || echo -n "arg$((i+1)) "; }
prtcom(){ num=0; for i in ${@}; do echo -n ${ary[${!i}]}; (( ++num != number )) && echo -n .; done; echo; }

nsloop()
{ 
    local arc arg
    arg=${1//arg}
    for((${1}=${2}+1; ${1}<${3}; ++${1})); do 
         if [[ ${1//[0-9]} == arg ]]; then
               for((arc=1; arc!=arg; ++arc)); do
                    (( ${1} == arg${arc} )) && continue 2
               done
         fi
         eval eval \\\$\{{4..${#}}\}
    done
}

case ${3} in
     p) argu="-0 +1 permut" ;;
     c) argu="-1 +0 combin" ;; 
esac

$(invoke)

Invoke the script:
C 4 3

[root@node2 ~]# bash permutation_combination.sh 4 3 c
1.2.3
1.2.4
1.3.4
2.3.4

P 4 3

[root@node2 ~]# bash permutation_combination.sh 4 3 p | xargs -n 6
1.2.3 1.2.4 1.3.2 1.3.4 1.4.2 1.4.3
2.1.3 2.1.4 2.3.1 2.3.4 2.4.1 2.4.3
3.1.2 3.1.4 3.2.1 3.2.4 3.4.1 3.4.2
4.1.2 4.1.3 4.2.1 4.2.3 4.3.1 4.3.2

C 8 5

[root@node2 ~]# bash permutation_combination.sh 8 5 c | xargs -n 8
1.2.3.4.5 1.2.3.4.6 1.2.3.4.7 1.2.3.4.8 1.2.3.5.6 1.2.3.5.7 1.2.3.5.8 1.2.3.6.7
1.2.3.6.8 1.2.3.7.8 1.2.4.5.6 1.2.4.5.7 1.2.4.5.8 1.2.4.6.7 1.2.4.6.8 1.2.4.7.8
1.2.5.6.7 1.2.5.6.8 1.2.5.7.8 1.2.6.7.8 1.3.4.5.6 1.3.4.5.7 1.3.4.5.8 1.3.4.6.7
1.3.4.6.8 1.3.4.7.8 1.3.5.6.7 1.3.5.6.8 1.3.5.7.8 1.3.6.7.8 1.4.5.6.7 1.4.5.6.8
1.4.5.7.8 1.4.6.7.8 1.5.6.7.8 2.3.4.5.6 2.3.4.5.7 2.3.4.5.8 2.3.4.6.7 2.3.4.6.8
2.3.4.7.8 2.3.5.6.7 2.3.5.6.8 2.3.5.7.8 2.3.6.7.8 2.4.5.6.7 2.4.5.6.8 2.4.5.7.8
2.4.6.7.8 2.5.6.7.8 3.4.5.6.7 3.4.5.6.8 3.4.5.7.8 3.4.6.7.8 3.5.6.7.8 4.5.6.7.8

P 5 5

[root@node2 ~]# bash permutation_combination.sh 5 5 p | xargs -n 8
1.2.3.4.5 1.2.3.5.4 1.2.4.3.5 1.2.4.5.3 1.2.5.3.4 1.2.5.4.3 1.3.2.4.5 1.3.2.5.4
1.3.4.2.5 1.3.4.5.2 1.3.5.2.4 1.3.5.4.2 1.4.2.3.5 1.4.2.5.3 1.4.3.2.5 1.4.3.5.2
1.4.5.2.3 1.4.5.3.2 1.5.2.3.4 1.5.2.4.3 1.5.3.2.4 1.5.3.4.2 1.5.4.2.3 1.5.4.3.2
2.1.3.4.5 2.1.3.5.4 2.1.4.3.5 2.1.4.5.3 2.1.5.3.4 2.1.5.4.3 2.3.1.4.5 2.3.1.5.4
2.3.4.1.5 2.3.4.5.1 2.3.5.1.4 2.3.5.4.1 2.4.1.3.5 2.4.1.5.3 2.4.3.1.5 2.4.3.5.1
2.4.5.1.3 2.4.5.3.1 2.5.1.3.4 2.5.1.4.3 2.5.3.1.4 2.5.3.4.1 2.5.4.1.3 2.5.4.3.1
3.1.2.4.5 3.1.2.5.4 3.1.4.2.5 3.1.4.5.2 3.1.5.2.4 3.1.5.4.2 3.2.1.4.5 3.2.1.5.4
3.2.4.1.5 3.2.4.5.1 3.2.5.1.4 3.2.5.4.1 3.4.1.2.5 3.4.1.5.2 3.4.2.1.5 3.4.2.5.1
3.4.5.1.2 3.4.5.2.1 3.5.1.2.4 3.5.1.4.2 3.5.2.1.4 3.5.2.4.1 3.5.4.1.2 3.5.4.2.1
4.1.2.3.5 4.1.2.5.3 4.1.3.2.5 4.1.3.5.2 4.1.5.2.3 4.1.5.3.2 4.2.1.3.5 4.2.1.5.3
4.2.3.1.5 4.2.3.5.1 4.2.5.1.3 4.2.5.3.1 4.3.1.2.5 4.3.1.5.2 4.3.2.1.5 4.3.2.5.1
4.3.5.1.2 4.3.5.2.1 4.5.1.2.3 4.5.1.3.2 4.5.2.1.3 4.5.2.3.1 4.5.3.1.2 4.5.3.2.1
5.1.2.3.4 5.1.2.4.3 5.1.3.2.4 5.1.3.4.2 5.1.4.2.3 5.1.4.3.2 5.2.1.3.4 5.2.1.4.3
5.2.3.1.4 5.2.3.4.1 5.2.4.1.3 5.2.4.3.1 5.3.1.2.4 5.3.1.4.2 5.3.2.1.4 5.3.2.4.1
5.3.4.1.2 5.3.4.2.1 5.4.1.2.3 5.4.1.3.2 5.4.2.1.3 5.4.2.3.1 5.4.3.1.2 5.4.3.2.1

Optimized!
It's running faster now!