Cómo manejar más de 10 parámetros en shell


101

Estoy usando bash shell en linux y quiero usar más de 10 parámetros en el script de shell


8
Tenga en cuenta que tener 10 parámetros lo hará bastante confuso. Quizás sería mejor usar opciones (por ejemplo, -a 1o --foo=bar) en su lugar. Consulte man getopt, man getoptsy man bashpara conocer algunas opciones para hacerlo.
Mikel

Respuestas:


158

Use llaves para resaltarlas:

echo "${10}"

También puede iterar sobre los parámetros posicionales como este:

for arg

o

for arg in "$@"

o

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
Tenga en cuenta que $ {10} funcionará en bash, pero limitará su portabilidad ya que muchas implementaciones de sh solo permiten especificaciones de un solo dígito.
William Pursell

1
@William: Hay algunos shells que no lo aceptan, como el shell Bourne heredado original, pero además de los shells que enumeré en otro comentario (Bash, dash, ksh y zsh), también funciona en csh, tcsh y ceniza Busybox.
Pausado hasta nuevo aviso.

1
@WilliamPursell ${10}es definido por POSIX
Steven Penny

2
Preocuparse por el ${10}funcionamiento solo es necesario cuando se utilizan implementaciones muy antiguas que no cumplen con los estándares. Probablemente solo de interés histórico ... ¡y aún no lo he usado! Supongo que porque las mejores prácticas dictan que 10 argumentos son demasiados a menos que se repitan, en cuyo caso los iterará en "$@"lugar de enumerarlos.
William Pursell

22

Puede tener hasta 256 parámetros de 0 a 255 con:

${255}

5
Creo que ese límite depende del caparazón. Bash, dash, ksh y zsh no parecen tenerlo. sh -c 'echo ${333}' /usr/bin/*
Pausado hasta nuevo aviso.

3
Mi caparazón sube cómodamente a 2 millonesset $(seq 2097152); echo ${2097152}
Steven Penny
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.