LINUX.ORG.RU

[bash] странное поведение


0

0

Есть простой скриптик:

#!/bin/bash
I=0
while true; do
    echo $I
    I=`expr $I + 1`
    if [ $I -eq 3 ]; then
      	break
    fi    
done
echo "iterator = $I"
он выводит числа от 0 до 2 и в конце строчку с текущим значением переменной i = 3, если теперь добавить обработку строк фаила
#!/bin/bash
I=0
cat file | while read LINE; do
    echo line $I: $LINE
    I=`expr $I + 1`
    if [ $I -eq 2 ]; then
      	break
    fi    
done
echo "iterator = $I"
то в конце переменная $i обнулиться! Почему так происходит? Обрабатывать строки на баше не айс?

Re: [bash] странное поведение

cat file | while read LINE; do

Тут создаётся дочерний процесс bash'а и переменная изменяется уже в нём.

anonymous ()

Re: [bash] странное поведение

[werehuman@lithium /tmp] $ cat test.sh
#!/bin/bash
I=0
while read LINE; do
    echo line $I: $LINE
    I=`expr $I + 1`
    if [ $I -eq 2 ]; then
         break
    fi
done < file
echo "iterator = $I"

[werehuman@lithium /tmp] $ cat file
abc
def
ghi
jkl
[werehuman@lithium /tmp] $ sh test.sh
line 0: abc
line 1: def
iterator = 2
Werehuman ★★ ()

Re: [bash] странное поведение

для чего это зетейвается? могет seq спасет?

wfrr ★★☆ ()

Re: [bash] странное поведение

Обрабатывать строки на баше не айс?

Нет, не айс, баш не для этого.

sdio ★★★★★ ()

Re: [bash] странное поведение

что за извращения?

I=`expr $I + 1`
если «I» — целочисленная переменная, то так и нужно говорить
declare -i I
I=I+1

pupok ★★ ()

Re: [bash] странное поведение

Интересно, когда придут сюда те кто будут орать про "башизмы".

true_admin ★★★★★ ()
Ответ на: Re: [bash] странное поведение от sdio

Re: [bash] странное поведение

Пришлось перейти на awk =) Надо было обработать 50 начальных строк в фаиле. Все ужалось до одной cтрашноватой строчки: awk 'BEGIN {ORS="&"} {if (NR <= 50) {gsub(/\[0\]/, "["NR-1"]"); print}}' $QUEUEFILE

fasol8 ()
Ответ на: Re: [bash] странное поведение от Werehuman

Re: [bash] странное поведение

Werehuman интересное решение, можно было так и остаться в рамках баша, кстати на нем некоторые умельцы даже игру life написали)))

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