Bash SH - Набор новое имя var включая на то имя другой var

Я просто должен создать возрастающее имя var в цикле. Переменная должна использовать "на имя var количество цикла".

Пример в цикле:

# on Cycle=1
MyVar$Cycle=Exec$Cycle   # (equal to MyVar1=Exec1)

# on Cycle=2
MyVar$Cycle=Exec$Cycle   # (equal to MyVar2=Exec2)

# etc...

Таким образом, как я могу правильно определить имя var?

В пакетной обработке работ легко:

set MyVar%Cycle%=Exec%Cycle% ...

Но я не знаю, как заставить его произойти в Bash.

Конечно, связь как это MyVar$Cycle=Exec$Cycle не работать.

Просто потребность смочь установить тот возрастающий varname, таким образом, я могу дать им значения, мне, возможно, понадобится время ко времени. Для меня сценарий работает вся польза, но набор нового имени var в режиме реального времени не делает.

2
задан 9 January 2020 в 16:16

1 ответ

Один возможный способ решить эту задачу состоит в том, чтобы использовать команду eval способом как это:

#!/bin/bash

for i in {1..5}
do
        eval "var$i"="$i"
done

# Output the result
for i in {1..5}
do
        echo -n "\$var$i : "
        eval echo "\$var$i"
done

Демонстрационный вывод:

$ ./cycle.sh
$var1 : 1
$var2 : 2
$var3 : 3
$var4 : 4
$var5 : 5

Однако я думаю, что лучше адаптировать Ваш документ на получение к работам с массивами для предотвращения такого волшебства:

#!/bin/bash

for i in {1..5}
do
        array["$i"]="$i"
done

# Output the result
for i in {1..5}
do
        echo "\$array[$i]" : "${array[$i]}"
done

Демонстрационный вывод:

$ ./cycle.sh
$array[1] : 1
$array[2] : 2
$array[3] : 3
$array[4] : 4
$array[5] : 5
  • Примечание: по умолчанию первый индекс в массиве Bash [0], нет [1].
2
ответ дан 12 January 2020 в 12:36

Другие вопросы по тегам:

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