Страница 1 из 1

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

Добавлено: 2009-07-26 19:35:20
mike345
Подскажите возможно ли использование переменной в имени другой переменной?
Так не работает:

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

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

var4=value: not found

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

Добавлено: 2009-07-26 21:05:33
Syward
а так?

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

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

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

Добавлено: 2009-07-26 21:15:43
mike345
Так работает, но это не то. Здесь переменная num является частью значения переменной value, а мне нужно, чтобы являлась частью имени (а не значения) переменной.
Все это для того, чтобы переменные можно было создавать динамически, а количество их заранее не известно.

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

Добавлено: 2009-07-26 21:25:22
zg

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

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

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

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

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

Добавлено: 2009-07-26 21:32:53
Syward

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

# 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

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

Добавлено: 2009-07-26 21:33:38
Syward
zg писал(а):

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

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

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

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

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

Добавлено: 2009-07-26 22:05:32
mike345
zg, Syward, спасибо, то что нужно.

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

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

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

Добавлено: 2009-07-30 10:55:45
Alex Keda
писать, лучше на шелле.
иначе однажды попадёте в контору где на серверах только sh, и требование скрипты писать тока на sh
вот тогда и вспомните мои слова, выкидывая ваши поделия нарисованные на экзотике

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

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

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

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').

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

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