Bash. Инициализировать динамический ассоциативный массив
У меня есть 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 ответ
Использование unset
Встроенный Баш
$ declare -gA myarray
$ myarray["foo"]=bar
$ echo ${myarray[@]}
bar
$ unset myarray
$ echo ${myarray[@]}
$ myarray["bar"]=foo
$ echo ${myarray[@]}
foo