
Por que não echo $1
imprime $1
neste script bash simples?
#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something
$ ./function.sh 123 -> why doesn't it print '123' as a result?
Responder1
Os parâmetros posicionais referem-se aos argumentos do script no nível principal do script, mas paraargumentos de funçãono corpo funcional. Então
print_something Something
realmente imprimiria Something
.
Se quiser passar os argumentos do script para uma função, você deve fazer isso explicitamente. Usar
print_something "$1"
para passar o primeiro argumento, ou
print_something "$@"
para passar todos eles, embora a função no exemplo use apenas o primeiro.
Responder2
Isso ocorre porque uma função chamada obtém seu próprio conjunto de parâmetros posicionais, independente do conjunto do pai/chamador. Tentar
print_something "$1"
(e echo "$1"
, ou melhor ainda printf '%s\n' "$1"
, lembre-se de citar expansões de parâmetros e que echo
não podem ser usadas para dados arbitrários).