Bash. Инициализировать динамический ассоциативный массив - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть код bash, объявляющий ассоциативный массив. После инициализации некоторые переменные добавляются в массив. Пока здесь все работает нормально. Проблема возникает, если программа снова достигает той же функции. Объявление массива снова выполняется, и я хочу, чтобы данные массива были уничтожены, но, похоже, оператор декларации не уничтожает данные.

Этот код PoC показывает, что я имею в виду.

#!/bin/bash

declare -gA myarray

myarray["testing"]="anyvalue"

for i in "${myarray[@]}"; do
    echo "${i}" # It prints "anyvalue", until here is ok
done

declare -gA myarray # At this point I want the array empty again!

for i in "${myarray [@]}"; do
    echo "${i}" # This is printing "anyvalue"!! and It should print nothing
done

echo "finished"

Вывод этого скрипта:

anyvalue
anyvalue
finished

Желаемый вывод:

anyvalue
finished

Я нашел этот похожий пост . Проблема этого поста в том, что кажется, что нужно знать фиксированную длину массива. В моем случае (реальный случай, а не код PoC) массив может получать динамические значения и элементы, и я не знаю, будет ли он иметь одно значение, или три, или двадцать.

Как я могу инициализировать массив, уничтожая его данные, не зная, сколько данных находится внутри? Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Использование unset Встроенный Bash

$ declare -gA myarray
$ myarray["foo"]=bar
$ echo ${myarray[@]}
bar
$ unset myarray
$ echo ${myarray[@]}

$ myarray["bar"]=foo
$ echo ${myarray[@]}
foo
...