Доступ к значению в паре КВ во время цикла - PullRequest
2 голосов
/ 16 октября 2019

У меня есть ассоциативный массив, где ключом и значением являются строки XML. Я использую это для операции поиска / замены в bash-скрипте.

#!/usr/local/bin/bash
declare -A findReplace

findReplace['<item name="Alice" title="President"/>']='<item name Bob title="CEO"/>'

for e in "${findReplace[@]}"; do
  find="$e"
  replace="${findReplace[$e]}"
  printf "\tSearching for: ${find}\n"
  printf "\tReplacing with: "${replace}"\n"
done

Это вывод этого:

Searching for: <item name Bob title="CEO"/>
Replacing with:

Посмотрите, как значение не читается вправильно? Я попытался выполнить итерации с индексом и использовать этот индекс для извлечения обоих, но затем и ключ, и значение считываются только до пробела.

Надеюсь, это понятно. Спасибо.

1 Ответ

2 голосов
/ 16 октября 2019

Добавьте ! для перебора ключей массива, а не его значений. Кроме того, избегайте подстановки переменных непосредственно в строку формата printf. Используйте %s и передайте переменные как отдельные аргументы.

for e in "${!findReplace[@]}"; do
  find="$e"
  replace="${findReplace[$e]}"
  printf '\tSearching for: %s\n' "${find}"
  printf '\tReplacing with: %s\n' "${replace}"
done
...