[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash и область видимости переменной в while



Vladimir Skubriev -> Debian-russian  @ Mon, 17 Feb 2014 11:52:06 +0400:

 VS>  
 VS>  
 VS> dmidecode_t6_out="$( dmidecode -t 6)"
 VS>  
 VS>  
 VS>         echo "$dmidecode_t6_out" | while read line
 VS>         do
 VS>                 if echo "$line" | grep -q 'Installed Size'
 VS>                 then
 VS>                 module="$( echo "$line" | sed -r 's/(^.*: )(.*)(\(.*$)/\2/' )"
 VS>                 printf "Founded MODULE: $module\n"
 VS>                 ram_mods="$ram_mods $module"
 VS>                 fi
 VS>         done
 VS>  
 VS> printf "Modules: $ram_mods\n"
 VS>  
 VS> Почему последний printf печатает только Modules без содержания переменной $ram_mods ?
 VS>  
 VS> Спасибо!

Это область видимости не у while, а у |.

while запускается в подпроцессе.

Но что-то у меня сходу не получилось показать, как правильно.  Может, коллеги помогут...

Работает

sed -e 's/^/zzz/' <(echo -e "qqq\nwww")

и работает

while read line; do var="$var $line"; done <nic.ru; echo "Var=$var"

А вот

while read line; do var="$var $line"; done <(echo -e "qqq\nwww"); echo "Var=$var"
выдает
bash: syntax error near unexpected token `<(echo -e "qqq\nwww")'

zsh - аналогично, почему - не понимаю.  Подозреваю порядок подстановки...


Reply to: