URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9563
[ Назад ]

Исходное сообщение
"Как создать индексную переменную в цикле?"

Отправлено rusya_rr , 09-Окт-12 18:37 
напр.
cat ./test

#! /bin/bash

for counter in "соль сахар кофе мёд"; do
echo $counter
var.$counter= "whatever"

echo " $(var.$counter) = $var.$counter " # Понятно, что чушь, но просто для представления
done

Хочу, чтоб было:
соль
varсоль=whatever
сахар
varсахар=whatever
кофе
varкофе=whatever
мёд
varмёд=whatever

Грубо, хочу работать в цикле с переменной, частью имени которой являлось бы значение счетчика на данной итерации цикла. bash говорит: varкофе - not found. Помогите, ум кипит.

PS. Кстати,необязательно цикл. Как создать и обратиться к переменной и ее значению, частью имени которой являлась бы другая переменная?


Содержание

Сообщения в этом обсуждении
"Как создать индексную переменную в цикле?"
Отправлено meantraitor , 09-Окт-12 20:02 
eval "var$counter=whatever"
eval "echo \\\$var$counter = \$var$counter"

"Как создать индексную переменную в цикле?"
Отправлено rusya_rr , 09-Окт-12 21:40 
> eval "var$counter=whatever"
> eval "echo \\\$var$counter = \$var$counter"

Это то, что надо.
Спасибо тебе, знающий незнакомец.



"Как создать индексную переменную в цикле?"
Отправлено Mimicus Pipicus Onanizmus , 10-Окт-12 11:33 
>> eval "var$counter=whatever"
>> eval "echo \\\$var$counter = \$var$counter"
> Это то, что надо.
> Спасибо тебе, знающий незнакомец.

$var = "var";
$obj = $var."сахар";
$$obj = whatever;



"Как создать индексную переменную в цикле?"
Отправлено rusya_rr , 10-Окт-12 13:28 

> $var = "var";
> $obj = $var."сахар";
> $$obj = whatever;

Теоретические изыскания вроде не в этом форуме :)
и btw - $$ - pid текущего шелла.


"Как создать индексную переменную в цикле?"
Отправлено Andrey Mitrofanov , 11-Окт-12 09:35 
> $var = "var";
> $obj = $var."сахар";
> $$obj = whatever;

Там ввирху BASH, а не этот вашшшь PERL.

$ i=1
$ j=0; ref=var$i; eval var$i=$(((j+1)*i)); echo $i ${!ref}; let i++
1 1
$ j=${!ref}; ref=var$i; eval var$i=$(((j+1)*i)); echo $i ${!ref}; let i++
2 4
$ j=${!ref}; ref=var$i; eval var$i=$(((j+1)*i)); echo $i ${!ref}; let i++
3 15
$ j=${!ref}; ref=var$i; eval var$i=$(((j+1)*i)); echo $i ${!ref}; let i++
4 64
$ _


"Как создать индексную переменную в цикле?"
Отправлено Andrey Mitrofanov , 11-Окт-12 10:02 
> $ j=${!ref}; ref=var$i; eval var$i=$(((j+1)*i)); echo $i ${!ref}; let i++
> 4 64

+

$ echo $var1 $var2 $var3 $var4 $var5 $var6
1 4 15 64 325 1956