UNIX/Linux Shell CheatSheet : free A4
PDF (52Kb) |
PNG (90Kb)
As we mentioned in Variables - Part I, curly brackets around a variable avoid confusion:
foo=sun
echo $fooshine # $fooshine is undefined
echo ${foo}shine # displays the word "sunshine"
That's not all, though - these fancy brackets have a another, much more powerful use. We can deal with issues of variables being undefined or null (in the shell, there's not much difference between undefined and null).
#!/bin/sh echo -en "What is your name [ `whoami` ] " read myname if [ -z "$myname" ]; then myname=`whoami` fi echo "Your name is : $myname"The "-en" to echo tells it not to add a linebreak. On some systems, you use a "\c" at the end of the line, instead.
steve$ ./name.sh What is your name [ steve ] Your name is : steve ... or, with user input: steve$ ./name.sh What is your name [ steve ] foo Your name is : fooThis could be done better using a shell variable feature. By using curly braces and the special ":-" usage, you can specify a default value to use if the variable is unset:
echo -en "What is your name [ `whoami` ] "
read myname
echo "Your name is : ${myname:-`whoami`}"
This could be considered a special case - we're using the output of the
whoami command, which prints your login name (UID). The more canonical
example is to use fixed text, like this:
echo "Your name is : ${myname:-John Doe}"
As with other use of the backticks, `whoami` runs in a subshell, so any cd commands, or setting any other variables, within the backticks, will not affect the currently-running shell.
echo "Your name is : ${myname:=John Doe}"
This technique means that any subsequent access to the $myname variable will always get a value, either entered by the user, or "John Doe" otherwise.

My blog has tips about how to use Unix and Linux commands