exported variable not persisted after script execution

I'm facing a wierd issue. I've a vm with solaris 11, and trying to write some bash scripts.

if, on the shell, I type :

export TEST=aaa

and subsequently run:

set

I correctly see a new environment variable named TEST whose value is aaa. If, however I do basically the same thing in a script. when the script terminates, I do not see the variable set. To make a concrete example, if in a file test.sh I have:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

it prints:

1:
2: daniele
3: sss
4: sss

and after its execution, TEST is not set in the shell. Am I missing something? I tried both to do export TEST=sss and the separate variable set/export with no difference.


export - make variable available for child processes, but not for parent.

source - run script in shell without creating child process

For exalmpe, persistent variable can be realised by writing to file

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

To make your variables visible, you need to source the script which exports your variables. See man source.