On Mon, 2005-09-26 at 07:12 +0200, Zoltan Boszormenyi wrote: > Hi, > > I am trying something like the following, > with a configuration file containing a token and > a directory in a line, depending on the tokens, > certain actions should be taken later. Validating > the configuration file whether all the required/optional > tokens are in the file should go like this: > > -----a.txt---------------------- > A directory1 > B directory2 > C directory3 > -------------------------------- > > -----a.sh----------------------- > #!/bin/bash > > HAS_A=0 > HAS_B=0 > HAS_C=0 > cat a.txt | while read i ; do > if [ "`echo $i | awk '{ print $1 }'`" = "A" ]; then > HAS_A=1 > fi > if [ "`echo $i | awk '{ print $1 }'`" = "B" ]; then > HAS_B=1 > fi > if [ "`echo $i | awk '{ print $1 }'`" = "C" ]; then > HAS_C=1 > fi > echo "A: $HAS_A B: $HAS_B C: $HAS_C" > done > echo "Final A: $HAS_A B: $HAS_B C: $HAS_C" > -------------------------------- > > Result is: > > -------------------------------- > $ ./a.sh > A: 1 B: 0 C: 0 > A: 1 B: 1 C: 0 > A: 1 B: 1 C: 1 > Final A: 0 B: 0 C: 0 > -------------------------------- > > It seems to be a bug to me, the envvars lose their values > they gained in the loop. It's an ancient bug I must add, > I just rechecked it and bash in RedHat 7.1 behaves the same. > How can I preserve the variables' values? Putting "export" > in front of every assignments doesn't help. > Careful, those are not environment variables as you imply by the statement above when you call them envars. This is caused by the scope of variables. You are actually creating 2 different copies of each HAS_A, HAS_B, and HAS_C. The first exists outside the while loop, the second exists only inside the while loop. And all only exist while the script is executing. Even though the name is the same, the scope is different. Even if they were environment variables and had a permanent life outside the script, the value assigned still only lasts as long as the calling process lives (in this case the while loop). I tested this to verify. > Best regards, > Zoltán Böszörményi >