shell-script – ¿Cómo pude acceder al parámetro posicional 14 usando $ 14 en un script de shell?

Pregunta:

Estaba leyendo sobre parámetros posicionales en Unix y luego encontré esta información:

El shell permite que una línea de comandos contenga al menos 128 argumentos; sin embargo, un programa de shell está restringido a hacer referencia a sólo nueve parámetros posicionales, $ 1 a $ 9, en un momento dado. Puede solucionar esta restricción utilizando el comando shift.

Así que creé un script de shell simple llamado file como el siguiente:

#! /bin/bash
echo $14

luego lo ejecutó de la siguiente manera:

./file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

y tengo 14!

Entonces, ¿cómo es eso posible si el shell no permite más de 10 parámetros (de $ 0 a $ 9) sin usar shift comando shift ?

Respuesta:

Cuando corres

echo $14

lo que sucede es que bash interpreta el argumento $14 como $1 y 4 separado. Luego expande $1 (que en este caso es igual a "1"), luego le agrega la cadena 4 , lo que da como resultado "14". Aunque ese era el resultado que esperaba, en realidad es un efecto secundario del comportamiento real de Bash. Como @steeldriver mencionado en los comentarios, ejecute su script de esta manera:

./file a b c d e f g h i j k l m n

y luego llamar a echo $14 no generará "n" sino "a4".

Tenga en cuenta que envolver la variable entre comillas dobles:

echo "$14"

todavía no expandirá la variable correctamente en Bash. El método estándar es usar llaves alrededor del nombre de la variable:

echo ${14}

Para obtener más información, consulte la documentación oficial para la expansión de parámetros en Bash. También puede hacer muchas más cosas interesantes, como

${14^^*}

para capitalizar el argumento n. ° 14. ¡Dale una lectura! 🙂

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım