I am at a bit of a loss as to the purpose of set and export in Bash (and I guess probably other shells too).
I would think it is for setting environment variables, but that can be done just with VARIABLE=VALUE, right?
Also typing set and export on their own show different values.
So what is their purpose?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
export exports to children of the current process, by default they are not exported. For example:
$ foo=bar $ echo "$foo" bar $ bash -c 'echo "$foo"' $ export foo $ bash -c 'echo "$foo"' bar
set, on the other hand, sets shell attributes, for example, the positional parameters.
$ set foo=baz $ echo "$1" foo=baz
Note that baz is not assigned to foo, it simply becomes a literal positional parameter. There are many other things set can do (mostly shell options), see help set.
As for printing, export called with no arguments prints all of the variables in the shell’s environment. set also prints variables that are not exported. It can also export some other objects (although you should note that this is not portable), see help export.
Method 2
See help set: set is used to set shell attributes and positional attributes.
Variables that are not exported are not inherited by child processes. export is used to mark a variable for export.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0