Je souhaite mémoriser un tableau associatif entre différentes exécutions de script. Ce que j'ai jusqu'à présent, c'est que, étant donné un fichier texte contenant une paire clé / valeur:
(
[james]=bond
)
Est un script pour charger cela dans un tableau associatif, y ajouter, puis l'écho d'une manière qui peut être redirigée dans un deuxième fichier:
#!/bin/bash
file=`cat $1`
key=$2
value=$3
declare -A row="$file"
row[$key]=$value
echo "("
for server in "${!row[@]}"
do echo "[$server]=${row[$server]}"; done
echo ")"
alors je peux l'exécuter comme:
./arrays.sh file1 honey rider > file2 ; mv file2 file1
Donnant
(
[james]=bond
[honey]=rider
)
Pourtant, cela semble très maladroit. Existe-t-il une façon plus propre de procéder?
declare -p hash > file
pour enregistrer lehash
tableau associatif.source file
restaurer.arrays.bash
...Réponses:
Dans
bash
,declare -p
peut être utilisé pour vider la définition d'une variable sous forme de code shell prêt à être interprété, vous pouvez donc effectuer des mises à jour du fichier avec:Notez qu'il est important que le fichier soit généré et obtenu dans le même environnement local (au moins la même
LC_CTYPE
catégorie).Un script pour afficher le contenu du fichier serait:
la source
bash
(plus récentes que celles disponibles au moment de la rédaction de la réponse), vous pourriez utiliserreadarray -td '' array
pour lire les enregistrements délimités NUL dans un tableau normal , puis les convertir en tableau associatif.