Alessandro C
Alessandro C

Reputation: 3560

Bash: exported variable not loaded in sh script

I have the following test.sh script:

#!/bin/sh
echo "MY_VARIABLE=$MY_VARIABLE"

Well, if I execute the following:

export MY_VARIABLE=SOMEVALUE
/bin/bash test.sh

it prints:

MY_VARIABLE=

Why the MY_VARIABLE is not read in the test.sh script?

You can reproduce the context here using the following script:

touch test.sh
chmod a+x test.sh
echo "#!/bin/sh" >> test.sh
echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh
export MY_VARIABLE=something
/bin/bash test.sh

Upvotes: 0

Views: 87

Answers (2)

Bodo
Bodo

Reputation: 9845

In your script to create the context, the line

echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh

creates the following line in test.sh:

echo MY_VARIABLE=

if MY_VARIABLE was unset before. The expansion of $MY_VARIABLE is done in the shell that prepares your context.

If you use single quotes

echo 'echo "MY_VARIABLE=$MY_VARIABLE"' >> test.sh

the script test.sh contains the correct line

echo "MY_VARIABLE=$MY_VARIABLE"

and prints MY_VARIABLE=something as expected.

Upvotes: 3

Bsquare ℬℬ
Bsquare ℬℬ

Reputation: 4487

Everything works well but if you want your parent process to keep environment update, you must source your script:

source test.sh

Otherwise, changes will only have effect during the execution of your script.

You can consider it the same as sourcing your ~/.bashrc file.

Upvotes: 0

Related Questions