Я хочу запомнить ассоциативный массив между различными запусками скрипта. На данный момент у меня есть текстовый файл, содержащий одну пару ключ / значение:
(
[james]=bond
)
Это скрипт, который загружает его в ассоциативный массив, добавляет к нему, а затем выводит его таким образом, который можно перенаправить во второй файл:
#!/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 ")"
тогда я могу запустить его как:
./arrays.sh file1 honey rider > file2 ; mv file2 file1
дающий
(
[james]=bond
[honey]=rider
)
Все же это кажется очень неуклюжим. Есть ли более чистый способ сделать это?
declare -p hash > file
сохранитьhash
ассоциативный массив.source file
для восстановления.arrays.bash
...Ответы:
In
bash
,declare -p
может использоваться для вывода определения переменной как готового к интерпретации кода оболочки, поэтому вы можете выполнять обновления файла с помощью:Обратите внимание, что важно, чтобы файл создавался и исходил из одной и той же локали (как минимум, в той же
LC_CTYPE
категории).Сценарий для отображения содержимого файла будет:
источник
bash
(более поздними, чем было доступно на момент написания ответа) вы сможете использоватьreadarray -td '' array
для чтения записей, разделенных NUL, в обычный массив, а затем преобразовать его в ассоциативный массив.