LINUX.ORG.RU

sh: присвоение переменных


0

0

Есть следующий скрипт:

#!/bin/sh

KNOWN_NETWORKS="`dirname $0`/known-networks"
KNOWN_NETWORK=0

check_network_name ()
{
	cat $KNOWN_NETWORKS | while read pl;
	do
#		if [ "$pl" == "$1" ]; then
			KNOWN_NETWORK=1
			echo $KNOWN_NETWORK # выводит 1
#		fi
	done
}

echo $KNOWN_NETWORK # выводит 0
check_network_name "some"
echo $KNOWN_NETWORK # выводит 0 (?)

Почему в последней строчке выводит всё равно 0, хотя присвоение происходит? Что-то я совсем не пойму.
anonymous

Это FAQ.

подобъекты запускающиеся в пайпе (в данном случае цикл | while read; do ...; done) выполняются в подпроцессах. Подпроцессы не передают свои переменные обратно родителю

dilmah ★★★★★
()

Пайпов можно избжать:
       
        while read pl;
        do
#       if [ "$pl" == "$1" ]; then
                        KNOWN_NETWORK=1
                        echo $KNOWN_NETWORK
#       fi
        done < $KNOWN_NETWORKS

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