Для моего текущего варианта использования я создаю скрипт scp, который скопирует файлы журналов с одного сервера на один или несколько других серверов.Итерации по нескольким ассоциативным массивам
I.e.
server1:/my/path1/log-files.* --> log_server1:/log/path1/server1
server1:/my/path2/log-files.* --> log_server2:/log/path/server1
server1:/my/path3/log-files.* --> log_server1:/log/path2/server1
Я хотел бы иметь возможность использовать ассоциативные массивы (массивы) в Баш (версия 4) для конфигурации файла журнала, и цикл по всем А. Массивы, помещая их имена в индексированный массив.
Но я не понимаю, как я ссылаюсь на именованный массив A., используя переменную как имя A. Array.
Пример:
#!/bin/bash
# GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) from RedHat/CentOS 6.4
declare -A log_server1 log_server2
log_server1=([name]="ls1" [user]="user")
log_server2=([name]="ls2" [user]="user")
declare -A log1 log2 log3
log1=([log_server]="log_server1" [path]="/my/path1" [file]="log-files" [rpath]="/log/path1/server1")
log2=([log_server]="log_server2" [path]="/my/path2" [file]="log-files" [rpath]="/log/path/server1")
log3=([log_server]="log_server1" [path]="/my/path3" [file]="log-files" [rpath]="/log/path2/server1")
logs=(log1 log2 log3)
for log in ${logs[@]}
do
# How can I now refer to the A. Array by the name of "log1", etc ?
...
done
Hell-вот ... Я посмотрел вокруг этого некоторое время, но это не гуманного приходят легко - таким образом, ваш вывод - уродливый - действителен. Это не будет хорошо читаемо для других, я скажу ... – sastorsl
Интересно ваше предложение по другому способу работы над этой конкретной проблемой. Несмотря на то, что ваш первоначальный ответ отвечает на мой вопрос более общим образом в отношении ассоциативных массивов и циклизации более чем одного массива. Как вы видели, я также использую ассоциативный массив для определения хоста сервера журналов, к которому также нужно обратиться. Я почти завершаю: не инструмент для работы, но это интересное предприятие в bash не то же самое. – sastorsl
Я вижу, где я ошибался в отношении косвенного расширения (не часть моего вопроса). Я написал 'l_ls = $ {log [log_server]}; l_ls = $ {!l_ls} ', где я должен был сбросить фигурные скобки. – sastorsl