web-dev-qa-db-fra.com

Pourquoi $ 1 dans une fonction n'imprime-t-il pas le premier argument du script?

Pourquoi echo $1 impression $1 dans ce simple script bash?

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

$ ./function.sh 123  -> why doesn't it print '123' as a result?
13
pietro letti

Les paramètres positionnels se réfèrent aux arguments du script dans le niveau principal du script, mais à arguments de fonction dans le corps de la fonction. Donc

print_something Something

afficherait en fait Something.

Si vous souhaitez passer les arguments du script à une fonction, vous devez le faire explicitement. Utilisation

print_something "$1"

pour passer le premier argument, ou

print_something "$@"

pour les passer tous, bien que la fonction dans l'exemple n'utilise que la première.

41
weirdan

En effet, une fonction appelée obtient son propre ensemble de paramètres positionnels, indépendamment de l'ensemble parent/appelant. Essayer

print_something "$1"

(et echo "$1", ou encore mieux printf '%s\n' "$1", n'oubliez pas de citer les extensions de paramètres et que echo ne peut pas être utilisé pour des données arbitraires).

10
RudiC