Перебор по динамически созданному массиву - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь перебрать массив, который содержит имена других массивов. Моя цель - получить доступ к каждому значению каждого динамически создаваемого массива.

Это мой цикл, в котором я перебираю $ REQUIRED_PARAMS, переданный из командной строки

for param in "${REQUIRED_PARAMS[@]}"
do
  create_param_array ${param} "${path_to_txt_reports}/${report}"
  echo "${WBC[@]}"
  echo "${!param}"
done

Это функцияcreate_param_array, в основном функция разбирает файл get, получает некоторые значения и создает массив, имя которого совпадает с именем параметра

################################################
# Function: create_param_array
# Inputs : $1 - param
#          $2 - full relative path to pdf report
# Outputs: array of parameters values
#################################################
create_param_array () {
  path=$2
   case $1 in
     WBC)
       WBC=($(get_param_values $1 $2))
       verbose_print WBC ${WBC[@]}
     ;;
....

Пока все хорошо, проблема в том, что мне нужно получить доступ к значениям, но яне знаю имя созданного массива, поэтому я не могу сделать

echo "${WBC[@]}"

, который печатает все значения

15.7 11.6 15.8

Я пытался

echo "${!param}"
echo "${!param[@]}"

, ноОчевидно, что param - это не массив, поэтому я получаю

15.7
0

Любая помощь очень ценится.

1 Ответ

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

Сохраните имя массива вместе с [@] в переменной, которую вы используете в косвенном обращении:

#! /bin/bash
WBC=(15.7 11.6 15.8)
p='WBC[@]'
echo "${!p}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...