Ahogy a manból is idézted: "The commands in the specified file are read and executed by the shell.". Shell, és nem subshell. Az "érdekességek" részből úgy veszem észre, éppen ezt a lényeget nem találtad meg a fentiekben. Minimálisan kifejtve hozzávetőlegesen ezek az okok:
Source-ot (.) használsz, tehát ennek hatására az alapeset ez:
#!/bin/sh
# második script: prb-source.sh
#!/bin/sh
# első script: what-shell.sh
export REF_SHELL=`ps -e -o pid,cmd | grep $$ |grep -v grep | awk '{print $2}'`
if [ -h $REF_SHELL ]
then
export REF_SHELL=`readlink $REF_SHELL`
fi
echo "using shell: $REF_SHELL"
echo "REF_SHELL = $REF_SHELL"
"Ha az első scriptben a hasbang -et átírom /bin/bash -ra (a második scriptben marad a /bin/sh - azaz jelen esetben dash) a REF_SHELL /dash lesz."
Mert az egy egyszerű komment lesz. (Az első sorban pedig egy, a hívó shell által speciálisan értelmezett komment.) Megközelítőleg így:
#!/bin/sh
# második script: prb-source.sh
#!/bin/bash
# első script: what-shell.sh
export REF_SHELL=`ps -e -o pid,cmd | grep $$ |grep -v grep | awk '{print $2}'`
if [ -h $REF_SHELL ]
then
export REF_SHELL=`readlink $REF_SHELL`
fi
echo "using shell: $REF_SHELL"
echo "REF_SHELL = $REF_SHELL"
"Ha a második scriptben, a hashbang -er /bin/bash -ra teszem akkor REF_SHELL értéke /bin/bash lesz."
Természetesen, mivel az az első sor, ennek megfelelően van megkülönböztetett jelentősége.
"Ha az eslő scriptben a második, feltételes értékadásból kiveszem aaz "export" kulcsszót akkor is a helyes érték "jön át" az első scriptbe vagyis dash (mindkét scriptben a hashbang /bin/sh)."
Az ok ugyanaz, mint ami a többinél. Ahogy Kambus írta, ez innentől egyetlen scriptnek tekinthető, tehát az export nem oszt, nem szoroz. (A feltételben meg felesleges másodszor is exportra jelölni a változót, mivel már megtetted előtte.)
Ha saját szemmel is meg akarsz győződni a fentiekről, akkor tegyél a shell neve mögé egy -v paramétert is (vagy set -o verbose).