Si ya vas en mas de la mitad del curso de programación con Bash shell, entonces ya sabes que significan estos símbolos extraños:
Como ya sabes, un parámetro es un numero o un valor que se inserta al momento de que estamos ejecutando el programa, esto es para que el programa haga sus actividades mas rápido sin perder tiempo en tener los valores uno por uno. En el mundo de la computación hay programas que pueden tener muchos parámetros, como en el caso del GPT-3, que es un programa que acepta algo así como muchos millones de parámetros. Una maldita locura. El punto es que en el caso de bash hay un limite y si no sabes como vencer ese limite, te vas a ver envuelto en mucho estrés.
En bash, como ya sabemos, cada $ seguido de un numero del 1 al infinito representa un parámetro que puede ser usado en el programa. El problema es que si tu tratas de hacer $10 no va a funcionar y te va a salir algo muy extraño, veamos el siguiente ejemplo:
#!/bin/bash
echo"Parameters values"echo"One: $1"echo"Two: $2"echo"Three: $3"echo"Four: $4"echo"Five: $5"echo"Six: $6"echo"Seven: $7"echo"Eight: $8"echo"Nine: $9"echo"Ten: $10"
A este programa le vamos a insertar 10 parámetros. Podría decirse que el input es el siguiente:
# INPUT
$ ./file.sh 12345678910#OUTPUT
Parameters values
One:1Two:2Three:3Four:4Five:5Six:6Seven:7Eight:8Nine:9Ten:10
Y aparentemente no paso nada, pero vamos a hacerlo a la inversa:
#INPUT
$ ./eight.sh 10987654321#OUTPUT
Parameters values
One:10Two:9Three:8Four:7Five:6Six:5Seven:4Eight:3Nine:2Ten:100
Aquí podemos ver que el Ten, en vez de ser 1, como lo habías puesto, ahora es un 100 que salió de nadiesabedonde.
La razón por la que esto pasa es porque el $10, solo lo esta tomando como el $1, y como ya tiene el valor del parámetro 1 ahí, ahora esta tomando mas valores, por lo que se hace todo un batidillo.
La manera de resolver esto es de la siguiente manera ${10}, para que así literalmente puedas poner el numero de los dígitos que quieras. De esa forma obtenemos lo siguiente:
#INPUT
$ ./eight.sh 10987654321# OUTPUT
Parameters values
One:10Two:9Three:8Four:7Five:6Six:5Seven:4Eight:3Nine:2Ten:1
Entonces, realmente no hay limite en el numero de parámetros que tu le pongas a tu programa. Sin embargo, si un parámetro no tiene valor o tiene un valor que no era el que le correspondía, ahí va a haber un error.