From: McLoughlin, Mark (mark.mcloughlin at domain intel.com)
Date: Wed 19 Jul 2000 - 08:39:13 IST
Bash seems to have weird rules about when to export variables out of a loop
or there's a bug. Either way it's interesting. Sorry the mail is so long ;)
Incidently this doesn't happen with ksh.
mybox:~/scripts$ cat test.sh
#!/bin/bash
export VAR="blank"
echo ----- $VAR -----
grep VAR t.tmp | nawk '{print $2}' | while read blah ; do
export VAR=$blah
echo ----- $VAR -----
done
echo ----- $VAR ----- # Should $VAR be "variable2" or "blank"
mybox:~/scripts$ cat t.tmp
VAR variable1
VAR variable2
mybox:~/scripts$ bash -x test.sh
+ export VAR=blank
+ VAR=blank
+ echo ----- blank -----
----- blank -----
+ grep VAR t.tmp
+ nawk '{print $2}'
+ read blah
+ export VAR=variable1
+ VAR=variable1
+ echo ----- variable1 -----
----- variable1 -----
+ read blah
+ export VAR=variable2
+ VAR=variable2
+ echo ----- variable2 -----
----- variable2 -----
+ read blah
+ echo ----- blank -----
----- blank -----
How about if I was just reading from stdin?
mybox:~/scripts$ cat test1.sh
+ cat test1.sh
#!/bin/bash
export VAR="blank"
echo ----- $VAR -----
while read blah ; do
export VAR=$blah
echo ----- $VAR -----
done
echo ----- $VAR ----- # Should $VAR be "variable2" or "blank"
mybox:~/scripts$ bash -x ./test1.sh
+ bash -x ./test1.sh
+ export VAR=blank
+ VAR=blank
+ echo ----- blank -----
----- blank -----
+ read blah
var1
+ export VAR=var1
+ VAR=var1
+ echo ----- var1 -----
----- var1 -----
+ read blah
var2
+ export VAR=var2
+ VAR=var2
+ echo ----- var2 -----
----- var2 -----
+ read blah
+ echo ----- var2 -----
----- var2 -----
It works just as you think it would. Oh yeah, I'm using
mybox:~$ bash --version
GNU bash, version 2.03.0(1)-release (i386-slackware-linux-gnu)
Copyright 1998 Free Software Foundation, Inc.
Good Luck,
Mark
This archive was generated by hypermail 2.1.6 : Thu 06 Feb 2003 - 13:06:54 GMT