Я пишу SHELL скрипт, для более удобного чтения RSS/Atom
В нем есть вот такой фрагмент кода, который парсит строки из файла и занимается делами с каждой конкретной строкой:
i=1
while [ $i -lt "$(($(echo "$url" | wc -l)+1))" ]; do
curl="$(cat file | head -n$i | tail -n1))"
cache="$(echo "$cache"; echo "$curl" | sfeed | iconv -f "$(echo $curl | grep -o "<?xml.*?>" | grep -o "encoding=\".*\"" | grep -o "\".*\"")" -t UTF-8 | sfeed_plain)"
i=$(($i+1))
done
Почему так долго - очевидно, если провернуть тоже самое в оболочке, то echo $cache займет примерно: real 0m3.365s user 0m3.220s sys 0m0.096s
что мучительно долго.
Но вот вопрос: чисто ради интереса попробовал после тех же действий printf $cache, и все вывелось за секунду, но когда я заменил в скрипте echo $cache на printf «$cache\n» стало как будто еще дольше.
P.s. Я понимаю, что тут уместнее использовать массивы, но это не стало решением