Bash bug?

Steven W. Orr steveo at syslang.net
Fri Sep 30 14:56:23 UTC 2005


On Monday, Sep 26th 2005 at 07:12 +0200, quoth Zoltan Boszormenyi:

=>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"
=>--------------------------------

#!/bin/bash

HAS_A=0
HAS_B=0
HAS_C=0
while read lbl dir
do
    [[ $lbl = A ]] && HAS_A=1
    [[ $lbl = B ]] && HAS_B=1
    [[ $lbl = C ]] && HAS_C=1
    echo "A: $HAS_A B: $HAS_B C: $HAS_C"
done < a.txt
echo "Final A: $HAS_A B: $HAS_B C: $HAS_C"

cat | while causes the while to be in a subshell.

=>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
=>--------------------------------


-- 
Time flies like the wind. Fruit flies like a banana. Stranger things have  .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net




More information about the fedora-list mailing list