проблема с массивом (bash-script)

Модератор: Модераторы разделов

bl00dl1nes
Сообщения: 115
ОС: ubuntu

проблема с массивом

Сообщение bl00dl1nes »

Пишу скрипт для скачивания с одного ресурса картинок. Возникла проблема в цикле for (выделено жирным, где именно), при первом проходе переменная "i" получает значение не 1 элемента массива, а всего сразу (тоесть $i = $sub), хотя в некоторых других версиях данного скрипта все проходит нормально. Есть подозрения, что в этом замешан синтаксис, а точнее неправильное его написание (в vim'e точка с запятой в проблемном месте не выделялась цветом, хотя несколькими строками ниже в таком же цикле все нормально). Прошу помощи в выяснении проблемы.

Код:

#!/bin/bash log="/www/bl00dl1nes/projects/new_school_site/aeris/testt/logging" #main="$1" fetch_img() { #images="$2" images=`echo "$2" | grep '<b>Images</b>' | awk {'print $7'} | sed 's/<br//'` id=`echo $1 | sed 's/cat//' | sed 's/p1.html//'` if [ -z "$images" -o "$images" = "0" ]; then exit 1 fi while [ ! "$images" = "0" ]; do image=`curl [url="http://..." 2>/dev/null | grep 'britepic_src' | sed 's/britepic_src=\"//' | sed 's/\"//'` if [ "$image" = "" ]; then images=`echo $(($images-1))` continue fi # echo -n "taking $image in $name" >> $log wget -U "" $image images=`echo $(($images-1))` # echo "; image count=$images" >> $log sleep 1 done } tmp=`curl http://... 2>/dev/null` jump="1" sub=`echo "$tmp" | grep -oE "cat"'[0-9]+'"p1.html"` for i in "$sub"; do if [ ! "$jump" = "1" ]; then stmp=`curl http://... 2>/dev/null` ssub=`echo "$stmp" | grep -oE "cat"'[0-9]+'"p1.html"` jump="0" fi if [ "$last" = "$i" ]; then continue fi # echo -e "$name\n$sub\n" >> debug name=`echo "$tmp" | grep '<title>' | sed 's/<title>//' | sed 's/<\/title.//' | sed 's/Aeris\ Dies:lB:://'` if [ ! -d "$name" ]; then mkdir "$name" fi cd "$name" # echo "name: $name; images: $images;" fetch_img "$i" "$tmp" if [ -n "$ssub" ]; then for f in "$ssub"; do stmp=`curl http://... 2>/dev/null` name=`echo "$stmp" | grep '<title>' | sed 's/<title>//' | sed 's/<\/title.//' | sed 's/Aeris\ Dies:lB:://'` if [ ! -d "$name" ]; then mkdir "$name" fi cd "$name" fetch_img "$f" "$stmp" cd .. done fi cd .. last="$i" done
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4463
Статус: GNU generation
ОС: Debian GNU/Linux

Re: проблема с массивом

Сообщение Rootlexx »

bl00dl1nes писал(а):
11.07.2009 00:32
for i in "$sub"; do

Если «$sub» расположена в кавычках, то всё её содержимое считается одной строкой, по которой и идёт итерация. Чтобы отдельные элементы строки разделялись, уберите кавычки.
И да, это не массив.
Спасибо сказали: