Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

KSH: tableau associatif ?

2 réponses
Avatar
maillaxa
Bonjour

Quelle est la bonne methode pour faire des tableaux associatifs en KSH
? J'ai essaye plusieurs truc sans succes.

Merci

Xavier

2 réponses

Avatar
Stephane Chazelas
On 24 Aug 2006 00:40:25 -0700, wrote:
Bonjour

Quelle est la bonne methode pour faire des tableaux associatifs en KSH
? J'ai essaye plusieurs truc sans succes.
[...]


Utiliser perl ou awk. Le shell n'est pas un language de
programmation, c'est un outil pour appeler d'autres commandes
avant tout. awk, dans la boite a outils Unix est l'outil avec
des tableaux associatifs.

Cela dit, pourquoi as-tu besoin de tableau associatif? En shell,
on a recours souvent a d'autres methodes.

Par exemple, pour compter le nombres d'occurrence de quelque
chose, on s'arrange pour afficher ces /choses/ une par ligne et
utiliser sort | uniq -c, plutot que d'incrementer des valeurs de
tableaux associatifs.

Sinon, ksh93 et zsh (deux implementations de ksh) ont le support
interne pour les tableaux associatifs. (typeset -A var)

--
Stephane

Avatar
FAb
writes:

Bonjour

Quelle est la bonne methode pour faire des tableaux associatifs en KSH
? J'ai essaye plusieurs truc sans succes.


Avec eval ?
mais c'est ignoble.

Voici un extrait d'un script qui se sert d'une table d'association pour adapter
la sortie de la commande df en ajoutant des pseudos points de montage associés
aux points réelles. (J'ai des liens symboliques dans un répertoire /go et je
n'accepte à mes données que par là. )
Je peux aussi envoyer le script entier.

Fab


### Scan to have hdb8 -> music2 moviez
while [ $i -lt ${#Assoc[*]} ]
do
mnt="${Assoc[$i]}"
let i++
real="${Assoc[$i]}"
let i++

eval "dum=${x_${real}}"
#echo "REAL[$real] => MNT[$mnt] et dum=(${dum})"
if [ -z "$dum"];then
eval "x_${real}=$mnt"
eval mnt_pts="$mnt_pts""$real"# Mark mnt_pts, avoid doubles
else
eval "x_${real}=$x_${real}""${mnt}"
fi

eval toto="$x_${real}"
done

for pt in ${mnt_pts[*]}
do
# echo "=$pt"
eval toto="$x_${pt}"
CMD_ASSOC=$CMD_ASSOC"-e ß|(% /mnt/$pt[$TAB]*$)|1$TAB $toto|¨
#echo $CMD_ASSOC
done