Eu quero memorizar uma matriz associativa entre diferentes execuções de script. O que tenho até agora é que, dado um arquivo de texto contendo um par de chave / valor:
(
[james]=bond
)
É um script para carregar isso em um array associativo, adicioná-lo e repeti-lo de uma maneira que possa ser redirecionada para um segundo arquivo:
#!/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 ")"
então eu posso executá-lo como:
./arrays.sh file1 honey rider > file2 ; mv file2 file1
Dando
(
[james]=bond
[honey]=rider
)
No entanto, parece muito desajeitado. Existe uma maneira mais limpa de fazer isso?
declare -p hash > file
para salvar ahash
matriz associativa.source file
restaurar.arrays.bash
...Respostas:
Em
bash
,declare -p
pode ser usado para despejar a definição de uma variável como código de shell pronto para ser interpretado, para que você possa fazer atualizações no arquivo com:Observe que é importante que o arquivo seja gerado e originado no mesmo local (pelo menos na mesma
LC_CTYPE
categoria).Um script para mostrar o conteúdo do arquivo seria:
fonte
bash
(mais recente do que estava disponível no momento em que a resposta foi escrita), você poderá usarreadarray -td '' array
para ler registros delimitados por NUL em uma matriz regular e depois convertê-los em uma matriz associativa.