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?
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.
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).