Я пытаюсь перебрать ассоциативный массив в Bash.
Это кажется простым, но цикл не соответствует начальному порядку массива.
Вот простой скрипт:
#!/bin/bash
echo -e "Workspace\n----------";
lsb_release -a
echo -e "\nBash version\n----------";
echo -e $BASH_VERSION."\n";
declare -A groups;
groups["group1"]="123";
groups["group2"]="456";
groups["group3"]="789";
groups["group4"]="abc";
groups["group5"]="def";
echo -e "Result\n----------";
for i in "${!groups[@]}"
do
echo "$i => ${groups[$i]}";
done
Вывод:
Workspace
----------
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
Bash version
----------
4.3.11(1)-release.
Result
----------
group3 => 789
group2 => 456
group1 => 123
group5 => def
group4 => abc
Почему у меня нет group1
, group2
и т.д.?
Я не хочу иметь алфавитный порядок, я просто хочу, чтобы цикл следовал начальному порядку объявления массива...
Есть ли способ?