Страница 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
Re: Возможно использование переменной в имени другой переменной?
Добавлено: 2009-07-26 21:15:43
mike345
Так работает, но это не то. Здесь переменная num является частью значения переменной value, а мне нужно, чтобы являлась частью имени (а не значения) переменной.
Все это для того, чтобы переменные можно было создавать динамически, а количество их заранее не известно.
Re: Возможно использование переменной в имени другой переменной?
Добавлено: 2009-07-26 21:25:22
zg
Re: Возможно использование переменной в имени другой переменной?
Добавлено: 2009-07-26 21:32:53
Syward
Код: Выделить всё
# cat test.sh
nums=`cat nums`
for i in $nums
do
setvar var${i} value
echo $var${i}
done
Re: Возможно использование переменной в имени другой переменной?
Добавлено: 2009-07-26 21:33:38
Syward
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'е что-то типа,
то ни у кого бы проблем не возникало. 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-скриптов низкая.
Потому что чисто голый шелл практически никто не использует.