set command displays all the local variables like below. How do I export these variables all at once?

b="asd asd"
c="hello world"
  • what do you mean export all at once? you can use semi colons to define in one line...like a=123;b="asd asd";c="hello world"
    – Raza
    Jun 11 '13 at 20:57
  • Very similar to unix.stackexchange.com/q/79064/4667 Jun 11 '13 at 21:00
  • 2
    set also displays functions and system variables like BASH_VERSION Jun 11 '13 at 21:02
  • Your question is unclear. Is that an excerpt of set output you're showing? If so, then it's not bash's. Do you want to export all the currently set variable including the special shell variables? Or only those 3 variables like in export a b c? Jun 11 '13 at 21:07
  • export ${!T*} would export any defined parameter whose name starts with T. Unfortunately, there doesn't seem to be a way to easily generate a list of all defined parameters.
    – chepner
    Jun 13 '13 at 15:43

Run the following command, before setting the variables:

set -a 

man page :

When this option is on, the export attribute shall be set for each variable to which an assignment is performed;

To turn this option off, run set +a afterwards.


set -a
. ./environment
set +a

Where environment contains:

BAS='quote when using spaces'
  • 14
    This must be enabled before assigning to variables, though. It doesn't do anything to previously assigned variables.
    – chepner
    Jun 13 '13 at 15:13
  • 1
    @chepner , Thanks i forgot to mention that !!
    – nitin
    Jun 13 '13 at 15:41
  • This also automatically exports functions in the same way as function example(){ echo good; }; export -f example
    – Oliver I
    Aug 29 '17 at 15:16

This works if your shell is bash ( possibly other shells as well )

export > /my/env/var/file

your new file will contain a dump of all currently defined variables ... with entries like

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

then to jack up current shell with all those env vars issue

source  /my/env/var/file
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. First, get all set environment variables: (set -o posix ; set) Reference: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Get all environment variable names, separated by space: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Reference: awk-Printing column value without new line and adding comma and https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Now, we need to export these variables, but xargs can not do this because it forks child process, export have to be run under current process. echo "export" ... build a command we want, then use `` to run it. That's all :p.

  • Welcomme to U&L SE. Maybe you can edit your post and give some explication.
    – Archemar
    Mar 6 '15 at 12:09
  • 1
    It's not correct to assume environment variable names will consist solely of a-z and A-Z. They commonly include underscores and digits as well, so the pattern would be [a-zA-Z_][a-zA-Z0-9_]*. There are some variations on this based on the shell you're using, but this is the safe / portable approach. May 5 '17 at 17:27
  • Good point @ChrisJohnson - updated! Aug 29 '17 at 15:52

You can prepend export to the variable name via awk and eval the resulting output:

eval $(printenv | awk -F= '{ print "export " $1 }')
  • 3
    printenv prints the variables that are already exported. That also won't work properly if there are variables that contain newline characters. Aug 29 '17 at 10:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.