OS: Solaris
Shell: Bash Shell
Scenario: Input the commands separately: "env", "export" and "set" (without any arguments) and there will be a list of variables and values returned.
My question: What's the difference among the returned values after inputting the three commands?
The env
and export
commands yield the same information, but not in the same format. And bash
's export
produces a very radically different output from the output of ksh
or (Bourne) shell's version. Note that set
and export
are shell built-in commands, but env
is an external command that has other uses than just listing the content of the environment (though that is one of its uses).
The set
command lists the variables you've created. This includes environment variables, regular (non-environment) variables, and function definitions (which we'll ignore here).
Consider:
x1=abc
x2=def; export x2
export x3=ghi
There are two exported variables (x2
and x3
), and one regular (non-exported) variable. The set
command will list all three; export
and env
will only list the exported ones.
The output of the env
command is mandated by the POSIX standard. This is simply the variable name and value followed by a newline:
name=value
Classically, the Bourne shell simply listed variables the same way for both set
and export
.
Korn shell encloses values in quotes if the value contains spaces or other characters that need protection, but otherwise uses the name=value
notation.
The set
command in bash
generates assignments with the value protected in quotes. However, the output for export
is a declare -x var=value
with quote protection. The general idea is presumably that you can use export > file
followed by source file
to reset the environment variables to the values that were in the environment at the time you did the export
.
set
command lists all shell variables and may list functions too.export
command lists environment variables.set
and export
commands are built into the shell.env
command with no arguments lists the environment it inherited from the process that executed it.