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

12

Por que não echo $1 print $1 neste script simples?

#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something

$ ./function.sh 123  -> why doesn't it print '123' as a result?
    
por pietro letti 27.08.2018 / 10:42

2 respostas

39

Parâmetros posicionais referem-se aos argumentos do script no nível principal do script, mas a função argumentos no corpo da função. Então

print_something Something

iria realmente imprimir Something .

Se você quiser passar os argumentos do script para uma função, você deve fazer isso explicitamente. Use

print_something "$1"

para passar o primeiro argumento ou

print_something "$@"

para passar todos eles, embora a função no exemplo use somente o primeiro.

    
por 27.08.2018 / 10:45
10

Isso ocorre porque uma função chamada obtém seu próprio conjunto de parâmetros posicionais, independentemente do conjunto do pai / responsável pela chamada. Experimente

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 pode ser usado para dados arbitrários).

    
por 27.08.2018 / 10:46