Возможно использование переменной в имени другой переменной?

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение mike345 » 2009-07-26 19:35:20

Подскажите возможно ли использование переменной в имени другой переменной?
Так не работает:

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

num=4
var${num}=value
echo $var4

var4=value: not found

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Syward » 2009-07-26 21:05:33

а так?

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

num=4
value=var${num}
echo $value
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

Аватара пользователя
mike345
сержант
Сообщения: 170
Зарегистрирован: 2007-12-09 15:57:55

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение mike345 » 2009-07-26 21:15:43

Так работает, но это не то. Здесь переменная num является частью значения переменной value, а мне нужно, чтобы являлась частью имени (а не значения) переменной.
Все это для того, чтобы переменные можно было создавать динамически, а количество их заранее не известно.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение zg » 2009-07-26 21:25:22

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

num=4
setvar var${num} value
echo $var4

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

num=4
eval "var${num}=value"
echo $var4

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Syward » 2009-07-26 21:32:53

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

# cat nums
1
2
3
4
5
6
7
8
9

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

# cat test.sh
nums=`cat nums`

for i in $nums
do
setvar var${i} value
echo $var${i}
done

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

# ./test.sh
1
2
3
4
5
6
7
8
9
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Syward » 2009-07-26 21:33:38

zg писал(а):

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

num=4
setvar var${num} value
echo $var4

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

num=4
eval "var${num}=value"
echo $var4
)))
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©


Гость
проходил мимо

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Гость » 2009-07-28 7:00:47

лучше пиши на ksh или zsh. Там массивы намного читабельнее, чем самодельные через eval
http://en.wikipedia.org/wiki/Comparison ... ter_shells

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Alex Keda » 2009-07-30 10:55:45

писать, лучше на шелле.
иначе однажды попадёте в контору где на серверах только sh, и требование скрипты писать тока на sh
вот тогда и вспомните мои слова, выкидывая ваши поделия нарисованные на экзотике
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение paix » 2009-07-30 11:55:25

lissyara писал(а):писать, лучше на шелле.
иначе однажды попадёте в контору где на серверах только sh, и требование скрипты писать тока на sh
вот тогда и вспомните мои слова, выкидывая ваши поделия нарисованные на экзотике
+1
но все равно шелл годится только для узких и примитивных задачь.

Что-то более сложное нужно писать на скриптовых языках (аля perl\python).
Переносимость у них гораздо больше.
With best wishes, Sergej Kandyla

Гость
проходил мимо

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение Гость » 2009-07-30 14:37:22

lissyara писал(а):иначе однажды попадёте в контору где на серверах только sh, и требование скрипты писать тока на sh
и? ты еще никогда не сталкивался с тем, что на разных системах /bin/sh разный. Например, в солярке есть ksh93 и собственный убогий sh[1], кой posix почти не поддерживает (например, ${parameter##word}). Какой мне выбирать?
paix писал(а):Что-то более сложное нужно писать на скриптовых языках (аля perl\python).
Переносимость у них гораздо больше.
переносимость плохая только у /bin/sh. Потому что никто тольком не знает, что такое стандартный shell. У одних это - POSIX shell, у других - ash или dash, у третьих модификация ash (FreeBSD), у четвертых - симлинк на другой shell с совместимостью (ksh, bash, zsh).

Вот если бы использовали сразу в shebang'е что-то типа,
  • #! /usr/bin/env zsh
то ни у кого бы проблем не возникало. zsh у всех одинаковый, единственной что может различатся - версии, но они экспортируются в переменные окружения ZSH_VERSION и ZSH_PATCHLEVEL. Эти переменные потом можно использовать в самом скрипте для определения доступности разных фич.

Проблемы могут начаться далее, когда используются невстроенные команды/функции. Например, программа cp(1) может иметь NetBSD расширение (ключик `-a') или GNU расширение (ключик `-d').

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Возможно использование переменной в имени другой переменной?

Непрочитанное сообщение paix » 2009-07-30 18:00:21

Гость писал(а):
paix писал(а):Что-то более сложное нужно писать на скриптовых языках (аля perl\python).
Переносимость у них гораздо больше.
переносимость плохая только у /bin/sh. Потому что никто тольком не знает, что такое стандартный shell. У одних это - POSIX shell, у других - ash или dash, у третьих модификация ash (FreeBSD), у четвертых - симлинк на другой shell с совместимостью (ksh, bash, zsh).
Гость писал(а): Проблемы могут начаться далее, когда используются невстроенные команды/функции. Например, программа cp(1) может иметь NetBSD расширение (ключик `-a') или GNU расширение (ключик `-d').
Именно по этой причине я утверждаю, что переносимость shell-скриптов низкая.
Потому что чисто голый шелл практически никто не использует.
With best wishes, Sergej Kandyla