GNU/Linux >> Tutoriels Linux >  >> Linux

Impossible d'utiliser un tableau comme variable d'environnement

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 '='.


Linux
  1. Parenthèse unique dans l'affectation de variables Bash ?

  2. Substitution de variable d'environnement dans sed

  3. Caractères autorisés dans les noms de variables d'environnement Linux

  4. Définir la variable d'environnement avec un espace sous Linux

  5. Comment changer la langue de mon git?

Comment définir une variable d'environnement dans Windows

Comment définir des variables d'environnement dans MacOS

Configurer la connexion à la base de données à l'aide de la variable d'environnement dans les rails

Comment définir une variable d'environnement dans Bash

Les 20 principales raisons d'utiliser l'environnement de bureau KDE

10 raisons d'utiliser Pantheon comme environnement de bureau