2010-10-21 24 views

Respuesta

4

El bash manual dice:

No hay límite máximo del tamaño de una matriz , ni ningún requisito de que los miembros ser indexados o asignados contigua.

Creo que esto se aplica, ya que los argumentos de la función se presentan como una matriz.

10

Para acceder a los argumentos de una función, puede iterar sobre ellos:

foo() { 
    for arg # "in [email protected]" is implied 
    do 
     echo $arg 
    done 
} 

o

bar() { 
    while [ $1 ] 
    do 
     echo $1 
     shift 
    done 
} 

o para acceder a los argumentos específicos:

baz() { 
    # for arguments above $9 you have to use curly braces 
    echo $1 $9 ${10} ${121375} 
} 
4

el número es bastante grande :

$ display_last_arg() { echo "${@: -1}"; } 
$ getconf ARG_MAX 
262144 
$ display_last_arg {1..262145} 
262145 
$ echo $((2**18)) $((2**20)) 
262144 1048576 
$ display_last_arg {1..1048576} 
1048576 

Como puede ver, es más grande que the kernel ARG_MAX limit, lo cual tiene sentido ya que Bash no llama al execve(2) para invocar las funciones definidas por Bash.

me sale malloc fallos si intento para llevar a cabo la expansión secuencia Bash ({1..NUM}) en el rango de 2^32, por lo que hay un límite físico en algún lugar (puede variar en su máquina), pero Bash es tan lento una vez que llegue por encima de 2^20 argumentos, que alcanzará un límite de rendimiento mucho antes de alcanzar un límite estricto.

Cuestiones relacionadas