Un bash
array ne peut pas être une variable d'environnement car les variables d'environnement ne peuvent être que des paires de chaînes clé-valeur.
Vous pouvez faire comme le shell fait avec son $PATH
variable, qui est essentiellement un tableau de chemins ; transformer le tableau en une chaîne, délimitée par un caractère particulier non présent autrement dans les valeurs du tableau :
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Ou plus propre,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
L'extension de ${arr[*]}
seront les éléments du arr
tableau séparé par le premier caractère de IFS
, ici défini sur :
. Notez que si vous le faites de cette façon, les éléments de la chaîne seront séparés (non délimité ) par :
, ce qui signifie que vous ne pourriez pas distinguer un élément vide à la fin, s'il y en avait un.
Une alternative à la transmission de valeurs à un script à l'aide de variables d'environnement consiste (évidemment ?) à utiliser les arguments de la ligne de commande :
arr=( aa bb cc )
./some_script "${arr[@]}"
Le script accéderait alors aux arguments passés soit un par un en utilisant les paramètres positionnels $1
, $2
, $3
etc, ou par l'utilisation de [email protected]
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "[email protected]"; do
printf 'I have "%s"\n' "$opt"
done
Les tableaux sont spécifiques à bash. Les variables d'environnement sont des paires nom-valeur.
Lisez les spécifications sur les variables d'environnement, qui disent, en partie :
La valeur d'une variable d'environnement est une chaîne de caractères. Pour un programme en langage C, un tableau de chaînes appelé l'environnement doit être disponible au début d'un processus. Le tableau est pointé par la variable externe environ , qui est défini comme :
extern char **environ;
Ces chaînes ont la forme name=value; noms ne doit pas contenir le caractère '='.