3 votes

comment exporter des tableaux en bash ? des astuces de contournement ?

J'utilise la version 4.2.37 de bash sous ubuntu 12.10. Mais depuis ubuntu 12.04, je ne parviens pas à exporter des tableaux dans bash...

Voici un exemple (tapez ces lignes en ligne de commande, ce n'est pas un script) :

export astr=(a "b c" d)
declare -p |grep astr
bash
echo ${astr[@]}
declare -p |grep astr

echo ne produit rien...

declare -p |grep astr ne produit rien non plus...

Ce que je cherche, c'est une solution de contournement, car pour autant que je sache, cela est considéré comme un bogue connu de bash.

EDIT : btw, si possible, la solution de contournement pourrait éviter de créer des fichiers de stockage temporaire pour le tableau car je peux exécuter le même script simultanément sur différents shells.

5voto

Steve Karg Points 11

Ce n'est pas un bogue de bash, il n'y a simplement pas de moyen sûr de mettre un tableau de bash dans l'environnement.

En ce qui concerne les solutions de contournement, cela dépend de ce que vous essayez d'obtenir avec l'exportation de tableaux en premier lieu.

Une solution possible, dans certains cas, est de vider le tableau dans un fichier et d'utiliser ce fichier là où vous en avez besoin.

astr=(a "b c" d)
declare -p astr > some_file

bash -c 'source ./some_file; printf "%s\n" "${astr[1]}"'

Une autre solution pourrait être de passer le tableau comme argument au prochain Shell.

astr=(a "b c" d)
bash -c 'astr=("$@"); printf "%s\n" "${astr[1]}"' _ "${astr[@]}"

-1voto

schmendrick Points 451

Attends, attends, attends... Je sais que je suis un peu en retard ici, mais cette question est toujours pertinente lorsque nous cherchons à exporter des tableaux sur google donc, ma solution de contournement était :

declare -a ASTR;
export ASTR=(`echo a b c`);

# Printing all elements content
echo "${ASTR[*]}";
# Printing a position 
echo "${ASTR[2]}";

Il retournera c lorsque la première position du tableau sera 0. J'espère que cela aidera quelqu'un qui le cherche.

Salutations

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X