Saya ingin mengingat array asosiatif antara berbagai skrip berjalan. Apa yang saya miliki sejauh ini adalah bahwa diberikan file teks yang berisi satu pasangan kunci / nilai:
(
[james]=bond
)
Adalah skrip untuk memuatnya ke dalam array asosiatif, tambahkan padanya, kemudian gema dengan cara yang dapat diarahkan ke file kedua:
#!/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 ")"
maka saya bisa menjalankannya sebagai:
./arrays.sh file1 honey rider > file2 ; mv file2 file1
Memberi
(
[james]=bond
[honey]=rider
)
Namun sepertinya sangat kikuk. Apakah ada cara yang lebih bersih untuk melakukan ini?
declare -p hash > file
untuk menyimpanhash
array asosiatif.source file
untuk memulihkan.arrays.bash
...Jawaban:
Di
bash
,declare -p
dapat digunakan untuk membuang definisi variabel sebagai kode shell siap ditafsirkan, sehingga Anda dapat melakukan pembaruan ke file dengan:Perhatikan bahwa penting agar file dibuat dan bersumber di lokal yang sama (setidaknya
LC_CTYPE
kategori yang sama ).Sebuah skrip untuk menampilkan konten file adalah:
sumber
bash
(lebih baru daripada yang tersedia pada saat jawaban itu ditulis), Anda dapat menggunakanreadarray -td '' array
untuk membaca catatan yang dibatasi NUL menjadi larik reguler dan kemudian mengonversinya menjadi larik asosiatif.