скрипт bash присваивает переменную ассоциативному массиву

Я боролся с новой для меня концепцией - ассоциативными массивами в сценарии bash.

Вот упрощенная версия моего кода:

#!/bin/bash
declare -A MYID
MYID[hello]=world
tac /home/user/filename | while read -r line; do
  MYID[hello]=me
done
echo "${MYID[hello]}"
exit

Вот что я думал, что это будет делать: 1) объявить ассоциативный массив с именем MYID 2) в MYID присвоить значение world ключу hello 3) прочитать файл /home/user/filename в обратном порядке строка за строкой 4) каждый раз, когда он читает строка назначит меня ключу hello в массиве MYID 5) распечатайте «me» и выйдите

Что он делает, так это печатает «мир» вместо «я». Что я делаю неправильно?


person user1464409    schedule 17.01.2013    source источник


Ответы (1)


Канал создает подоболочку, поэтому любые изменения, которые вы вносите в MYID в цикле while, существуют только в этой подоболочке. Попробуйте это вместо этого:

while read -r line; do
    MYID[hello]=me
done < <(tac /home/user/filename)
person chepner    schedule 17.01.2013
comment
Спасибо, это, кажется, работает. Я добавлю это в свой список вещей, чтобы учиться. - person user1464409; 17.01.2013