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

Bash bug?



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.

Best regards,
Zoltán Böszörményi


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