Объединение двух переменных

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

vlad001
Сообщения: 56

Объединение двух переменных

Сообщение vlad001 »

Приветствую!
bash скрипт, используется, кроме самого скрипта два файла (для удобства). Первый файл допустим options в которым прописана некая промежуточная логика:

Код: Выделить всё

for I in 1 2 3
do
VAR=$VARIABLE_$I
if [[ -n $VAR ]]; then VARIABLE_$I=--optn=$VAR; fi
done
Второй файл, settings:

Код: Выделить всё

VARIABLE_1=2
VARIABLE_2=4
VARIABLE_3=8
Основной скрипт:

Код: Выделить всё

!#/usr/bin/bash
source settings
source options
OPT_VARIABLE_$I=$VARIABLE_$I
echo $OPT_VARIABLE_$I
Скрип не рабочий, потому что как минимум не понятно как правильно написать переменные типа "VAR=$VARIABLE_$I", "then VARIABLE_$I=--optn=$VAR", "OPT_VARIABLE_$I=$VARIABLE_$I", "echo $OPT_VARIABLE_$I". Либо какой-то другой вариант, отличный от этого. Вообще, хотел заложить такую логику, чтение переменных VARIABLE_1, VARIABLE_2, VARIABLE_3, но вместо числа в конце подставить переменную 1,2,3 из цикла. В if-then проверить есть ли значение у самих переменных (2, 4, 8), в echo (там будет другой исполняемый файл), должны быть три новых переменные VARIABLE_1=--optn=2, VARIABLE_2=--optn=4, VARIABLE_3=--optn=8.
Спасибо сказали:
Аватара пользователя
Red Gremlin
Сообщения: 512
Статус: самоучка
ОС: Rosa 2016 Fresh

Re: Объединение двух переменных

Сообщение Red Gremlin »

Что мешает использовать ассоциативные массивы7
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 903
ОС: debian, fedora (i3-wm)

Re: Объединение двух переменных

Сообщение olecya »

Можно определить переменную имя которой находится в другой переменной через eval

Код: Выделить всё

var=VAR
for I in {1..3}; do
    eval ${var}_${I}=$I
    eval echo \$${var}_$I
done
echo $VAR_1
И через ссылочную переменную в declare

Код: Выделить всё

for I in {1..3}; do
    declare -n my_${I}=${var}_$I
    eval echo \$my_$I
done
echo $my_1
Прошу заметить в последнем случае мы определяем не значение, а определяем синоним к имени существующей переменной, но это дает возможность для комбинаций в обеих частях определения.

Код: Выделить всё

declare -n my_1=VAR_1
...
И через смену значений в синониме будет меняться значение в инициализированной переменной.
Спасибо сказали: