LINUX.ORG.RU

Глюки bash'а?

 ,


0

1
$ cat test.sh
#!/bin/bash
i="-"
cat some_file | while read line
do
        i="$i-";
        echo $i;
done
echo $i

$ ./test.sh
--
---
----
-----
------
-

Переменная i при входе в цикл сохраняет свое значение и сбрасывает свое значение при выходе из него.
Баг? Фича? Что делать, чтобы значение сохранялось?

Это фича, из-за пайпа твой while исполнаетя в sub_SHELL

Что делать?

while ... do

done < $FILE

sdio ★★★★★ ()
Последнее исправление: sdio (всего исправлений: 2)

пайп создает subshell для цикла

Убери cat some_file, и сделай после done < some_file

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

Если очень надо (например, употребляется не cat, а что-то более сложное, или надо пропустить ввод ещё через какой-нибудь фильтр), то можно употребить 'shopt -o lastpipe' - башизм, заставляющий bash вести себя как некоторые реализации ksh (для них это тоже не гарантируется).

ABW ★★★★ ()

в десятке.

Скоро этот тупой вопрос займёт первое место в рейтинге. А то вопрос «почему я ввожу пароль, а букв нет?» почему-то в последние три года задавать стали реже.

И да, ответ: потому что ты говнокодер, и тупо копипастишь всякое говно из интернетов. Тут субшелл не нужен.

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

Если очень надо (например, употребляется не cat

блжад! Временный файл для этого надо сделать. Ну или использовать перенаправление вида <(command).

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

потому что ты говнокодер

И чо?

Тут субшелл не нужен.

Дык ты напиши как надо а не плюйся словами бранными.

crutch_master ★★★★★ ()
Ответ на: комментарий от emulek

Временный файл для этого надо сделать.

Я и сделал. Но как-то это не очень элегантно.

crutch_master ★★★★★ ()

Манулы читать не пробовал?

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