| Sidebar: Shell Variable Substitution
 
You can test and change the shell variables in a variety
of ways without 
using the shell's if command or the test(1) command.
I show only the Bourne Shell's methods here, because
it is the shell 
used most portably for programming. However, the csh
and ksh's 
substitution abilities are richer than sh's abilities.
If you're 
programming with either of the other shells, spend time
investigating 
their substitution features. They're worth it. sh surrounds
the variable name with braces, putting the $ outside
of the 
braces, when referring to a variable substitution operation. 
${var} -- Use this format when embedding 
the value of a variable inside another value, such as
a prefix or 
suffix. If the other value won't confuse the shell about
the name 
of the variable, you don't need the braces. For example,
given 
 
things=more
want=${things}stuff
 
the variable $want gets the value morestuff. 
Without the braces, the shell might think the variable
name is $thingsstuff. 
However, in the directory setting, 
 
newdir=$MAINDIR/new 
 
the braces aren't needed because the slash is a sufficient
separator. 
${var:-value} -- If the variable exists 
in the environment and has a value, yield its value.
Otherwise, use 
the value named after the :- characters. This is the
simplest 
form of substitution, yielding up the named value only
if the variable 
doesn't already have one. 
${var:=value} -- If the variable exists 
in the environment and has a value, yield its value.
Otherwise, assign 
the value named after the := characters to the variable
and 
yield the new value. 
${var:?value} -- If the variable exists 
in the environment and has a value, yield its value
and do nothing 
else. Otherwise, print the value named after the :?
characters 
and exit the shell. 
${var:+value} -- If the variable exists 
in the environment and has a value replace it with the
value named 
after the :+ characters. Leave the variable alone otherwise.
 
 
 
 |