diff --git a/src/test/regress/regress.sh b/src/test/regress/regress.sh
index ba6e57478cbb2b27261bb15dc73f19c483650a9a..ef58dc34a98e7a218ddbce9001e193e04a65c185 100755
--- a/src/test/regress/regress.sh
+++ b/src/test/regress/regress.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.50 2000/05/16 02:14:15 tgl Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.51 2000/05/24 22:32:58 tgl Exp $
 #
 if [ $# -eq 0 ]; then
 	echo "Syntax: $0 <hostname> [extra-tests]"
@@ -41,17 +41,27 @@ FRONTEND="psql $HOSTLOC -a -q -X"
 #		testname/hostnamepattern=substitutefile
 # where the hostnamepattern is evaluated per the rules of expr(1) --- namely,
 # it is a standard regular expression with an implicit ^ at the start.
+#
+# The tempfile hackery is needed because some shells will run the loop
+# inside a subshell, whereupon shell variables set therein aren't seen
+# outside the loop :-(
 # ----------
-SUBSTLIST=""
-RESULTMAP=`cat resultmap`
-for LINE in $RESULTMAP
+TMPFILE="matches.$$"
+cat /dev/null > $TMPFILE
+while read LINE
 do
 	HOSTPAT=`expr "$LINE" : '.*/\(.*\)='`
 	if [ `expr "$hostname" : "$HOSTPAT"` -ne 0 ]
 	then
-		SUBSTLIST="$SUBSTLIST $LINE"
+		# remove hostnamepattern from line so that there are no shell
+		# wildcards in SUBSTLIST; else later 'for' could expand them!
+		TESTNAME=`expr "$LINE" : '\(.*\)/'`
+		SUBST=`echo "$LINE" | sed 's/^.*=//'`
+		echo "$TESTNAME=$SUBST" >> $TMPFILE
 	fi
-done
+done <resultmap
+SUBSTLIST=`cat $TMPFILE`
+rm -f $TMPFILE
 
 if [ -d ./obj ]; then
 	cd ./obj
@@ -97,7 +107,7 @@ fi
 fi
 
 echo "=============== running regression queries...         ================="
-echo "" > regression.diffs
+cat /dev/null > regression.diffs
 
 if [ "x$hostname" = "xi386-pc-qnx" ]; then
 	DIFFOPT="-b"
@@ -123,7 +133,7 @@ do
 	EXPECTED="expected/${tst}.out"
 	for LINE in $SUBSTLIST
 	do
-		if [ `expr "$LINE" : "$tst/"` -ne 0 ]
+		if [ `expr "$LINE" : "$tst="` -ne 0 ]
 		then
 			SUBST=`echo "$LINE" | sed 's/^.*=//'`
 			EXPECTED="expected/${SUBST}.out"
diff --git a/src/test/regress/run_check.sh b/src/test/regress/run_check.sh
index 80983cd6d17ce0cb8b5d7e2d9020ad69afb457b9..05393198867dc2562e1ca142c09abd0cdb5ceade 100755
--- a/src/test/regress/run_check.sh
+++ b/src/test/regress/run_check.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.18 2000/05/18 16:11:39 momjian Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.19 2000/05/24 22:32:59 tgl Exp $
 
 # ----------
 # Check call syntax
@@ -104,18 +104,27 @@ FRONTEND="$BINDIR/psql $HOSTLOC -a -q -X"
 #		testname/hostnamepattern=substitutefile
 # where the hostnamepattern is evaluated per the rules of expr(1) --- namely,
 # it is a standard regular expression with an implicit ^ at the start.
+#
+# The tempfile hackery is needed because some shells will run the loop
+# inside a subshell, whereupon shell variables set therein aren't seen
+# outside the loop :-(
 # ----------
-SUBSTLIST=""
-exec 4<resultmap
-while read LINE <&4
+TMPFILE="matches.$$"
+cat /dev/null > $TMPFILE
+while read LINE
 do
 	HOSTPAT=`expr "$LINE" : '.*/\(.*\)='`
 	if [ `expr "$hostname" : "$HOSTPAT"` -ne 0 ]
 	then
-		SUBSTLIST="$SUBSTLIST $LINE"
+		# remove hostnamepattern from line so that there are no shell
+		# wildcards in SUBSTLIST; else later 'for' could expand them!
+		TESTNAME=`expr "$LINE" : '\(.*\)/'`
+		SUBST=`echo "$LINE" | sed 's/^.*=//'`
+		echo "$TESTNAME=$SUBST" >> $TMPFILE
 	fi
-done
-exec 4<&-
+done <resultmap
+SUBSTLIST=`cat $TMPFILE`
+rm -f $TMPFILE
 
 # ----------
 # Catch SIGINT and SIGTERM to shutdown the postmaster
@@ -258,8 +267,8 @@ fi
 # Run the regression tests specified in the ./sql/run_check.tests file
 # ----------
 echo "=============== Running regression queries...          ================"
-echo "" > regression.diffs
-echo "" > regress.out
+cat /dev/null > regression.diffs
+cat /dev/null > regress.out
 
 if [ "x$hostname" = "xi386-pc-qnx" ]; then
         DIFFOPT="-b"
@@ -439,7 +448,7 @@ lno=0
 		EXPECTED="expected/${name}.out"
 		for LINE in $SUBSTLIST
 		do
-			if [ `expr "$LINE" : "$name/"` -ne 0 ]
+			if [ `expr "$LINE" : "$name="` -ne 0 ]
 			then
 				SUBST=`echo "$LINE" | sed 's/^.*=//'`
 				EXPECTED="expected/${SUBST}.out"