2

I'm just learning the basics, including how to declare and mess around with variables. Is there a simple way to display a list of all the variables I've named? (Everything I've found by searching only talks about environment variables, which may be what I'm looking for, but probably not?)

Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
Lenoxus
  • 125
  • 1
  • 4

2 Answers2

6

Running declare itself will give you a list of all the environmental variables in the current shell, including those you defined yourself. It will also include any functions, unless you use the -p option that skips them, but adds some extra noise.

lynxlynxlynx
  • 3,313
  • 16
  • 23
1

There are 2 different types of variables (actually more than that, but in this context just 2), private and exported.

  • Private variables are variables which can be used in the shell (or script) but not by programs launched by the shell (or script).
    You can get a list of all variables including exported ones by using declare, typeset, or set. In bash all 3 do the same thing.

  • Exported variables can be used by both the shell or programs launched by it.
    You can get a list of exported variables by using env.

One key thing to note is when doing things such as this:

FOO="bar"
echo "$FOO"

$FOO is a private/non-exported variable. The shell is actually expanding $FOO to bar before it passes it to echo. So echo is actually being called as echo "bar".


You can export variables by doing export FOO, or export FOO="bar".
Additionally you can export a variable for just a single call to a program by adding the variable at the beginning of the command. For example

FOO="bar" cmd1
cmd2

cmd1 will have access to $FOO but cmd2 will not.

phemmer
  • 70,657
  • 19
  • 188
  • 223