Question: How can I set variables to be used in scripts as well? They don't have to be global / system-wide, just the current session is sufficient. But for some reason they seem gone even if I run a script right from my current terminal.

Example:

```bash
foo=bar
echo "$foo"

```

output: `bar`

However if test.sh contains `echo "$foo"` and I do:

```
foo=bar
./test.sh

```

The output is empty. How do I set a scope for temporary variables with a terminal session that remains valid when executing scripts from that same session?

Answer: 
When you run your shell script, it executes in a new shell instance, and does not inherit any variables instantiated in the interactive shell instance.

Specific variables can be inherited this way, called environment variables. You make a variable assignment an environment variable by using `export`, such as `export foo=bar`. This is the bash syntax, other shells may use `env` or some other method.

You can also cause the shell script to execute in the same shell instance by 'sourcing' it. You can do this with `. test.sh` (note the period) or using `source test.sh`. You can do this in your interactive session, or you can do this from within a shell script. This is really handy for creating shell "libraries", where you source in a set of shell functions or variable definitions from an external file. Super handy.

For instance:

```
#!/bin/bash
. /path/lib.sh
echo $foo # foo is instantiated in lib.sh
do_something # this is a shell function from lib.sh

```

where lib.sh is:

```
foo="bar"
do_something() {
echo "I am do_something"
}

```
Another option could be to pass the variable to your script as an argument.

```
foo=bar
./test.sh $foo

```

The issue then becomes the contents of ./test.sh

It would have to `echo $1` instead of `echo $foo` - the $1 indicating the first argument passed to the script.