Quiero memorizar una matriz asociativa entre diferentes ejecuciones de script. Lo que tengo hasta ahora es que dado un archivo de texto que contiene un par clave / valor:
(
[james]=bond
)
Es un script para cargar eso en una matriz asociativa, agregarlo y luego repetirlo de una manera que se pueda redirigir a un segundo archivo:
#!/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 ")"
entonces puedo ejecutarlo como:
./arrays.sh file1 honey rider > file2 ; mv file2 file1
Dando
(
[james]=bond
[honey]=rider
)
Sin embargo, parece muy torpe. ¿Hay una forma más limpia de hacer esto?
declare -p hash > file
para guardar lahash
matriz asociativa.source file
restaurar.arrays.bash
...Respuestas:
En
bash
,declare -p
se puede usar para volcar la definición de una variable como código de shell listo para ser interpretado, por lo que puede hacer actualizaciones al archivo con:Tenga en cuenta que es importante que el archivo se genere y obtenga en la misma configuración regional (al menos, la misma
LC_CTYPE
categoría).Un script para mostrar el contenido del archivo sería:
fuente
bash
(más reciente de la que estaba disponible en el momento en que se escribió la respuesta) que podría usarreadarray -td '' array
para leer registros delimitados por NUL en una matriz regular y luego convertirla en una matriz asociativa.