LINUX.ORG.RU

Сформировать имя переменных в shell скрипте


0

1

Есть переменная COUNT которая равна какому-то числу. Нужно сформировать в цикле просмотр переменной VARx где х это число от 0 до $COUNT. Собственно вопрос в том как сформировать имя переменной VARх в цикле и просмотреть её значение? Все это чудо надо сделать на в shell скрипте.

Плохое решение: eval «var$x=...»
Хорошее решение: bash arrays

AITap ★★★★★ ()

Озвучте исходную задачу, если не сложно.

anonymous ()
Ответ на: комментарий от anonymous

Программа которая вызывает скрипт устанавливает набор переменных - одна INPUT_FILES_COUNT и соответственно INPUT_FILE_0 ... INPUT_FILE_N где N значение INPUT_FILES_COUT - 1. Надо в цикле обработать все входные файлы некоторым алгоритмом. Вопрос в том как написать цикл который бы перибирал все переменные INPUT_FILE_x где х от 0 до INPUT_FILES_COUNT - 1? Да еще есть OTPUT_FILE_x которую в этом цикле надо перебирать также как и INPUT_FILE_x.

mskmsk1985 ()
Ответ на: комментарий от mskmsk1985

Нельзяли по маске взять файлы name_\d+ и проверить \d+ на принадлежность заданному диапозону? Потом сделать что-нибудь с каждым из файлов и записать в name_out_\d+?

anonymous ()
Ответ на: комментарий от sdio

Потому, что, как правило, по-дефолту.

anonymous ()
Ответ на: комментарий от AITap

Плохое решение: eval «var$x=...»

Нормальное решение

eval "INPUT_FILE=INPUT_FILE_$i"
eval "OTPUT_FILE=OTPUT_FILE_$i"
$CMD $INPUT_FILE > $OTPUT_FILE

sdio ★★★★★ ()
Последнее исправление: sdio (всего исправлений: 1)
Ответ на: комментарий от mskmsk1985
for infile in jot -w INPUT_FILE_ $INPUT_FILES_COUNT 0
do
    outfile=`echo $infile|sed 's/INPUT/OTPUT'`
    ...
done
sergv ()

вот, например, старый как мир скрипт для получения значений переменных в CGI:

#!/bin/sh
#Converts Data sent by method Post or Get
# into stdout like param1 name1 param2 name2 etc.

if [ "$REQUEST_METHOD" = "POST" ] ; then
    QUERY_STRING=`sed "s/\\\`/_/g"`
fi

line=`echo $QUERY_STRING|sed 's/&/ /g'`

for pair in $line
do
    name=`echo $pair|sed 's/=/ /g'|awk '{print $1}'`
    type=`echo $pair|sed 's/=/ /g'|awk '{print $2}'|sed -e 's/%\(\)/\\\x/g'|sed 's/+/ /g'`
    printf "${name}=\"${type}\"\n"
done

Выполняется так:

eval ./convert

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от sdio

Я так понял, что ему нужны переменные с переменными именами. Разве нет?

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