
¿Por qué no se echo $1
imprime $1
en este sencillo script bash?
#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something
$ ./function.sh 123 -> why doesn't it print '123' as a result?
Respuesta1
Los parámetros posicionales se refieren a los argumentos del script en el nivel principal del script, pero aargumentos de funciónen el cuerpo funcional. Entonces
print_something Something
en realidad imprimiría Something
.
Si desea pasar los argumentos del script a una función, debe hacerlo explícitamente. Usar
print_something "$1"
para pasar el primer argumento, o
print_something "$@"
para pasarlos todos, aunque la función del ejemplo solo usa el primero.
Respuesta2
Esto se debe a que una función llamada obtiene su propio conjunto de parámetros posicionales, independientemente del conjunto del padre o de la persona que llama. Intentar
print_something "$1"
(y echo "$1"
, o mejor aún printf '%s\n' "$1"
, recuerde citar expansiones de parámetros que echo
no se pueden usar para datos arbitrarios).