У меня две проблемы при работе с ассоциативными массивами.Во-первых, я не могу сохранить собственный заказ.
#!/bin/bash
#First part, I just want to print it ordered in the custom created order (non-alphabetical)
declare -gA array
array["PREFIX_THIS","value"]="true"
array["PREFIX_IS","value"]="false"
array["PREFIX_AN","value"]="true"
array["PREFIX_ORDERED","value"]="true"
array["PREFIX_ARRAY","value"]="true"
for item in "${!array[@]}"; do
echo "${item}"
done
Желаемый вывод:
PREFIX_THIS,value
PREFIX_IS,value
PREFIX_AN,value
PREFIX_ORDERED,value
PREFIX_ARRAY,value
Но я получаю это:
PREFIX_IS,value
PREFIX_ORDERED,value
PREFIX_THIS,value
PREFIX_AN,value
PREFIX_ARRAY,value
Пока здесь первая проблема.Для второй проблемы порядок не важен.Я добавил больше материала в ассоциативный массив, и я просто хочу зациклить его без дубликатов.Добавим:
array["PREFIX_THIS","text"]="Text for the var"
array["PREFIX_IS","text"]="Another text"
array["PREFIX_AN","text"]="Text doesn't really matter"
array["PREFIX_ORDERED","text"]="Whatever"
array["PREFIX_ARRAY","text"]="More text"
Я просто хочу зациклить «PREFIX_THIS», «PREFIX_IS», «PREFIX_AN» и т. Д., Печатая каждый из них только один раз.Я просто хочу напечатать, выполняя «эхо» в цикле (порядок для этой части не важен, просто печатать каждый из них только один раз)Желаемый результат:
PREFIX_ORDERED
PREFIX_AN
PREFIX_ARRAY
PREFIX_IS
PREFIX_THIS
Я добился этого, делая "грязные" вещи.Но должен быть более элегантный способ.Это мой рабочий, но не слишком элегантный подход:
already_set=""
var_name=""
for item in "${!array[@]}"; do
var_name="${item%,*}"
if [[ ! ${already_set} =~ "${var_name}" ]]; then
echo "${var_name}"
already_set+="${item}"
fi
done
Любая помощь?Спасибо.