[ksh93] sysctl hw.disknames > associative array
#1

Je cherche à créer un tableau associatif, à partir des informations récupérées depuis la commande 'sysctl -n hw.disknames'.

J'arrive à créer un tableau simple, tel que :
Code :
IFS=','; set -A disknames -- $(sysctl -n hw.disknames)

Ce que j'aimerais arriver à faire est un tableau associatif où l'index/clé prend le nom du périphérique et la valeur celle de son duid.
Tel que :
disknames[sd0]=duid_sd0

Une idée (en faisant le plus simple et fonctionnel) ?

J'ai bien pensé à faire :
Code :
for d in "${disknames[@]}"; do k=${d%%:*}; v=${d##*:}; disks[$k]=$v; done
mais ça ne fonctionne pas

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre
#2

Même ça:
Code :
for ((i=0; i<"${#disknames[@]}"; i++)); do info="${disknames[$i]}"; k="${info%%:*}"; v=${info##*:}; disks[$v]=$k; unset info; done
ne donne pas le résultat attendu !

je ne comprends plus là, pfff...

OK, j'ai un résultat :

Code :
IFS2=$IFS
IFS=','; set -A disknames -- $(sysctl -n hw.disknames)
IFS=$IFS2
typeset -A disks
for d in "${disknames[@]}"; do disks["${d##*:}"]="${d%%:*}"; done

Apparemment, il manquait la déclaration typeset avant…

GPG:Fingerprint ed25519 : 072A 4DA2 8AFD 868D 74CF  9EA2 B85E 9ADA C377 5E8E
GPG:Fingerprint rsa4096 : 4E0D 4AF7 77F5 0FAE A35D  5B62 D0FF 7361 59BF 1733
Répondre


Sujets apparemment similaires…
Sujet / Auteur Réponses Affichages Dernier message

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)