> День добрый, коллеги!
> Желаемый результат сценария ниже - это получить значение R из внутреннего (вложенного)
> цикла while, и на его основании принять решение о завершении внешнего
> цикла.
> На самом деле получается бесконечный цикл, т.к. за пределами внутреннего while всегда
> остается R=0.
> Т.е. получается, нужно что-то по смыслу как указатели с разименованием, но в
> шеле я не знаю ничего подобного.[root@local bind]# a='aaa'; b='a'; echo "${a} ${b} ${!b}"
aaa a aaa
надо учиться...
в частности:
- любой конвейер запускается в отдельном шеле и не экспортированные переменные текущего контекста ему не доступны
- даже не знаю на что такой код нужен...
> Пожалуйста, подскажите как быть?
мб так для самого простого варианта?:
cat file|\
grep 'blah'|\
awk '{ <script_do_staf> }'
> R=0
> while [ $R -eq 0 ]
> do
> cat file|while read data
> do
> R=1
> ....<do stuff>....
> [ $data = "blah" ] || R=0
для bash правильно:
[ $data == "blah" ]
если уж строки сравниваются
еще правильней:
[ "$data" == 'blah' ]
ибо в значении data пробелы могут быть, которые без кавычек интерпритируются как отдельная команда шела
> done
> done
доступ к внешним переменным так например можно сделать:
all=`cat file|\
while read line
do
echo "$line"
done`
echo "$all"
---
[root@local temp]# cat txt.txt
111
222
333
[root@local temp]# cat ttttttt
#!/bin/bash
all=`cat txt.txt|\
while read line
do
echo "do_stuff $line"
done`
echo "$all"
[root@local temp]# ./ttttttt
do_stuff 111
do_stuff 222
do_stuff 333
[root@local temp]#