LINUX.ORG.RU

Bash: вопрос об именах переменных


0

0

Есть переменные:

DEV1_DOWNLINK=val
DEV2_DOWNLINK=val
DEV3_DOWNLINK=val

val - не число.

Как в цикле перебрать эти переменные оп имени? Делаю

for ((i=1; i <= "$DEVS_COUNT" ; i++)) do
    DLINK=$DEV${i}_DOWNLINK
    echo $DLINK
done

В таком виде он принимает $DEV за имя переменной. По всякому пробовал экранировать, да не вышло.

А как правильно?
★★★★★

Ответ на: комментарий от Vint

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

Vint ★★
()

1) Некорректно поставлена задача.

>
> Есть переменные:
>
> DEV1_DOWNLINK=val
> DEV2_DOWNLINK=val
> DEV3_DOWNLINK=val
>
> val - не число.


Тогда что такое val ???
Если это переменная, то нада писать так
DEV1_DOWNLINK=$val

В противном случае принимается значение "val".

2) Использовать связку, типа DEV${i}_DOWNLINK
нельзя, ибо это интерпретируется, как не значение, а как переменная, типа $i_DOWNLINK, а, тк, ее нет, то и ничего не получится из этого.

3) Проще всего сделать массив и обращаться к нему так:


fuzk@kolibri:~/bashtest$ cat test.sh
DEV_DOWNLINK[1]=343241
DEV_DOWNLINK[2]=54342
DEV_DOWNLINK[3]=3

for ((i=1; i<4; i++)); do
echo ${DEV_DOWNLINK[$i]};
done

fuzk@kolibri:~/bashtest$ ./test.sh
343241
54342
3

fuzk
()
Ответ на: комментарий от fuzk

Ой, чего-то ты намутил, помощничек :))

>1) Некорректно поставлена задача.

нормально поставлена задача. Так мне удобней. И без всяких массивов.

>Тогда что такое val ???

под "val" я имел ввиду "value", значение (любое).

>В противном случае принимается значение "val".

:))

>2) Использовать связку, типа DEV${i}_DOWNLINK нельзя, ибо это интерпретируется, как не значение, а как переменная, типа $i_DOWNLINK, а, тк, ее нет, то и ничего не получится из этого.

Ты попробуй сначала, предварительно обратив внимание на фигурные скобки. У меня почему-то получается DEV1_DOWNLINK, а не i_DOWNLINK :)

fagot ★★★★★
() автор топика
Ответ на: комментарий от fagot

> Ты попробуй сначала, предварительно обратив внимание на фигурные 
> скобки. У меня почему-то получается DEV1_DOWNLINK, а не i_DOWNLINK :)

Пробывал, а теперь ты попробуй так например:

for ((i=1; i<5; i++)); do 
echo "DEV$i_DOWNLINK"; 
done

Как ты думашь - что выйдет, а ???

Ответ: 
DEV
DEV
DEV
DEV

Думаю, комментарии излишни.

fuzk
()
Ответ на: комментарий от fuzk

Еще раз: обрати внимание на ФИГУРНЫЕ СКОБКИ перед/после i, уважаемый

fagot ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.