上のスクリプトは <tt>bar</tt>と出力します。 一行のスクリプトの内部で <tt>$foo</tt> 変数を変更していますが、その変更は呼び出し側のプロセスには影響しません。(しかしそのスクリプトによって呼び出されたスクリプトには影響するでしょう。)
If a given environment variable is desired for just one command, the syntax <source lang="bash" enclose="none">var=value command</source> may be used, with the syntax of a variable assignment (or multiple variable assignments) preceding a command on the same line. (Note that, despite using the syntax of a variable assignment, this is very different from a normal Bash variable assignment, in that the variable is automatically exported into the environment, and in that it only exists for the one command. If you want avoid the confusion of similar syntax doing dissimilar things, you can use the common Unix utility <tt>env</tt> for the same effect. That utility also makes it possible to ''remove'' an environment variable for one command — or even to remove ''all'' environment variables for one command.) If <tt>$var</tt> already exists, and it's desired to include its actual value in the environment for just one command, that can be written as <source lang="bash" enclose="none">var="$var" command</source>.
An aside: sometimes it's useful to put variable definitions — or function definitions — in one Bash script (say, <tt>header.sh</tt>) that can be called by another Bash script (say, <tt>main.sh</tt>). We can see that simply invoking that other Bash script, as <tt>./header.sh</tt> or as <tt>bash ./header.sh</tt>, will not work: the variable definitions in <tt>header.sh</tt> would not be seen by <tt>main.sh</tt>, not even if we "exported" those definitions. (This is a common point of confusion: <tt>export</tt> exports variables into the environment so that other processes can see them, but they're still only seen by ''child'' processes, not by ''parents''.) However, we can use the Bash built-in command <tt>.</tt> ("dot") or <tt>source</tt>, which runs an external file almost as though it were a shell function. If <tt>header.sh</tt> looks like this: