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 за имя переменной. По всякому пробовал экранировать, да не вышло.

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

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

попробуй так

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

Vint ★★ ()
Ответ на: Re: Bash: вопрос об именах переменных от Vint

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

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

Vint ★★ ()

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

DEV1_DOWNLINK=val1
DEV2_DOWNLINK=val2
DEV3_DOWNLINK=val3

DEVS_COUNT=3

for i in `seq 1 $DEVS_COUNT`; do
    DLINK_TMP=DEV${i}_DOWNLINK
    DLINK=${!DLINK_TMP}
    echo $DLINK
done

watashiwa_daredeska ★★★★ ()

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

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 ()
Ответ на: Re: Bash: вопрос об именах переменных от fuzk

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

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

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

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

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

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

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

:))

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

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

fagot ★★★★★ ()
Ответ на: Re: Re: Bash: вопрос об именах переменных от fagot

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

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

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

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

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

Ответ: 
DEV
DEV
DEV
DEV

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

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