98

In tcsh, I have the following script working:

#!/bin/tcsh
setenv X_ROOT /some/specified/path

setenv XDB    ${X_ROOT}/db
setenv PATH   ${X_ROOT}/bin:${PATH}

xrun -d xdb1 -i $1 > $2

What is the equivalent to the tcsh setenv function in Bash?

Is there a direct analog? The environment variables are for locating the executable.

5 Answers 5

143

export VAR=value will set VAR to value. Enclose it in single quotes if you want spaces, like export VAR='my val'. If you want the variable to be interpolated, use double quotes, like export VAR="$MY_OTHER_VAR".

Sign up to request clarification or add additional context in comments.

3 Comments

PS: no need for the double quotes in the last one. The shell does not perform word splitting for variable assignments.
Just for the beginners. I had not understood it directly, here in normal English: interpolate "$X" means here that you already have a variable X that is filled with a value, e.g. "A", and you want to read out that value "A" first, and then assign this value as the value of VAR. You do not want VAR to be a string of "$X" here of course. And then the comment above seems also logical, that you will not even need the "". And for a direct assignment of "A", use 'A'. Please correct me if I got it wrong.
bonus points for the final note about interpolated vars
47

The reason people often suggest writing

VAR=value
export VAR

instead of the shorter

export VAR=value

is that the longer form works in more different shells than the short form. If you know you're dealing with bash, either works fine, of course.

Comments

34

Set a local and environment variable using Bash on Linux

Check for a local or environment variables for a variable called LOL in Bash:

$ set | grep LOL
$
$ env | grep LOL
$

Sanity check, no local or environment variable called LOL.

Set a local variable called LOL in local, but not environment. So set it:

$ LOL="so wow much code"
$ set | grep LOL
LOL='so wow much code'
$ env | grep LOL
$

Variable 'LOL' exists in local variables, but not environment variables. LOL will disappear if you restart the terminal, logout/login or run exec bash.

Set a local variable, and then clear out all local variables in Bash

$ LOL="so wow much code"
$ set | grep LOL
LOL='so wow much code'
$ exec bash
$ set | grep LOL
$

You could also just unset the one variable:

$ LOL="so wow much code"
$ set | grep LOL
LOL='so wow much code'
$ unset LOL
$ set | grep LOL
$

Local variable LOL is gone.

Promote a local variable to an environment variable:

$ DOGE="such variable"
$ export DOGE
$ set | grep DOGE
DOGE='such variable'
$ env | grep DOGE
DOGE=such variable

Note that exporting makes it show up as both a local variable and an environment variable.

Exported variable DOGE above survives a Bash reset:

$ exec bash
$ env | grep DOGE
DOGE=such variable
$ set | grep DOGE
DOGE='such variable'

Unset all environment variables:

You have to pull out a can of Chuck Norris to reset all environment variables without a logout/login:

$ export CAN="chuck norris"
$ env | grep CAN
CAN=chuck norris
$ set | grep CAN
CAN='chuck norris'
$ env -i bash
$ set | grep CAN
$ env | grep CAN

You created an environment variable, and then reset the terminal to get rid of them.

Or you could set and unset an environment variable manually like this:

$ export FOO="bar"
$ env | grep FOO
FOO=bar
$ unset FOO
$ env | grep FOO
$

Comments

14

VAR=value sets VAR to value.

After that export VAR will give it to child processes too.

export VAR=value is a shorthand doing both.

3 Comments

doesn't it give it to parent processes, not childs? If a shell script does an export, then the shell I invoked it with has that variable, IIRC.
No. "are marked for automatic export to the environment of subsequently executed commands.", meaning child processes executed after the export.
out of curiousity, where is that citation from?
11

I think you're looking for export - though I could be wrong.. I've never played with tcsh before. Use the following syntax:

export VARIABLE=value

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.