[center]Bonjour,[/center]
j'aimerais savoir si le comportement de bash tel qu'il exécute les deux scripts ci-dessous est bien normal : le premier script (main) appelle le second script (sub) en lui passant ses arguments en ligne de commande
le script
main exécute le script
sub en lui passant dans un premier temps l'ensemble de ses arguments de la ligne de commande, puis aucun argument
#!/usr/bin/env bash
main()
{
echo "${#} élément(s) vus par main"
echo "---> passage de tous les arguments à sub"
source sub "${@}"
echo "---> sans passage d'argument à sub"
source sub
}
main "${@}"
script
sub : il prend les arguments qui lui sont passés en ligne de commande et les affiche un par un
#!/usr/bin/env bash
sub()
{
echo "${#} élément(s) vus par sub"
for data in "${@}" ; do
echo "${data}"
done
}
sub "${@}"
Les résultats observés sont les suivants :
_ quand aucun argument n'est passé en ligne de commande, tout se passe bien : le script
sub indique bien qu'il n'a reçu, dans ses deux appels successifs, aucun argument en ligne de commande
$ ./main
0 élément(s) vus par main
---> passage de tous les arguments à sub
0 élément(s) vus par sub
---> sans passage d'argument à sub
0 élément(s) vus par sub
_ si au moins un argument est passé en ligne de commande, le premier appel au script
sub indique bien qu'il a reçu les mêmes éléments en ligne de commande, par contre le second appel au script
sub,
pourtant sans argument, indique qu'il a reçu des arguments en ligne de commande (identiques à l'appel précédent, comme si ceux-ci avaient été repassés en ligne de commande alors qu'il n'en est rien !)
./main a b c
3 élément(s) vus par main
---> passage de tous les arguments à sub
3 élément(s) vus par sub
a
b
c
---> sans passage d'argument à sub
3 élément(s) vus par sub
a
b
c
ma question :
est-ce bien normal ???, si oui, comment dans un tel schéma faire en sorte de ne passer aucun argument au script
sub ?