Por que $1 em uma função não imprime o primeiro argumento do script?

Por que $1 em uma função não imprime o primeiro argumento do script?

Por que não echo $1imprime $1neste 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 echonão podem ser usadas para dados arbitrários).

informação relacionada