Как выполнить итерации по ассоциативным массивам в Bash

На основе ассоциативного массива в сценарии Bash я должен выполнить итерации по нему для получения ключа и значения.

#!/bin/bash

declare -A array
array[foo]=bar
array[bar]=foo

Я на самом деле не понимаю, как получить ключ при использовании для - в цикле.

319
задан codeforester 2 February 2017 в 20:08
поделиться

2 ответа

Доступ к ключам осуществляется с помощью восклицательного знака: $ {! Array [@]} , доступ к значениям осуществляется с помощью $ {array [@]} .

Вы можете перебирать пары ключ / значение следующим образом:

for i in "${!array[@]}"
do
  echo "key  : $i"
  echo "value: ${array[$i]}"
done

Обратите внимание на использование кавычек вокруг переменной в операторе for (плюс использование @ вместо * ). Это необходимо, если какие-либо ключи содержат пробелы.

Путаница в другом ответе возникает из-за того, что ваш вопрос включает «foo» и «bar» для ключей и значений.

545
ответ дан 23 November 2019 в 01:00
поделиться

Вы можете получить доступ к ключам с помощью $ {! Array [@]} :

bash-4.0$ echo "${!array[@]}"
foo bar

Затем легко перебирать пары ключ / значение:

for i in "${!array[@]}"
do
  echo "key :" $i
  echo "value:" ${array[$i]}
done
41
ответ дан 23 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: