Объединение строк для формирования существующего имени переменной и работа в формате массива

apt source fooнайдет исходный пакет, содержащий двоичный пакет foo, загрузит его и извлечет в текущий каталог. (Подробнее см. на справочной странице apt-get.)

dget fooзагрузит двоичный пакетfooв текущий каталог. Он не загружает исходный пакет.

Получив URL, dgetзагружает соответствующий файл; кроме того, если загруженный файл является файлом .dscили .changes, он загрузит другие файлы, на которые есть ссылки, и извлечет полученный исходный пакет.

0
12.04.2021, 23:42
1 ответ

Мне кажется, у вас проблемы с использованием косвенных переменных.

Чтобы получить доступ к переменной массива, называемой:

a=(one two t33 f44)

вам нужна косвенная переменная, которая содержит только то, что вы написали бы внутри конструкции ${...}. Чтобы получить значение ${a[2]}, вам нужна косвенная переменная, установленная в:

indirect=a[2]

А затем используйте его:

$ echo "<${!indirect}>"
<t33>

Я считаю, что вы должны проверить, что находится в indirect_var='${'${st}'[@]}'.

Возможно:indirect_var="${st}[@]"Ваше описание недостаточно ясно, чтобы быть уверенным.

Но имейте в виду, что изменение переменной stсамо по себе не приведет к доступу к другим переменным/значениям. Вы должны изменить значение indirect_var, прежде чем оно заработает.

Попробуйте этот скрипт:

#!/bin/bash
mat_1=(ServerAB ServerFR ServerPE ServerAM ServerHU)
mat_2=(SeAB SeFR SePE SeAM SeHU)

st="mat_1";
#indirect_var='${'${st}'[@]}'
indirect_var="${st}[@]"
#(Please, see the "--Desired Ouput Section--" in comments)

#----- What is Hapenning now at output ----
echo "Values of mat_1        : ${mat_1[@]}"
echo "Indirect value of mat_1: ${!indirect_var}"

st=mat_2
echo "This WONT work"
echo "Values of mat_2        : ${mat_2[@]}"
echo "Indirect value of mat_2: ${!indirect_var}"

st=mat_2
indirect_var="${st}[@]"
echo "This DOES work"
echo "Values of mat_2        : ${mat_2[@]}"
echo "Indirect value of mat_2: ${!indirect_var}"


Возможно, вам следует забыть о stи обновить indirect_varпо мере необходимости.

Кроме того, нет никакого способа получить количество из косвенной переменной, есть не синтаксис, подобный echo "${!#indirect_var}", но вы можете прекрасно справиться с:

indirect_var="#mat_1[@]"
echo "${!indirect_var}"

Возможно, определите count_indirect_var="#$indirect_var"для подсчета.

Удачи!.

0
28.04.2021, 22:53

Теги

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