Using Variables

When assigning a variable, the name is not preceded by a dollar sign: variable=value. When referencing a variable, it is preceded by a dollar sign: echo $variable. Actually, the $variable syntax is a special case, but it is sufficient most of the time. Variables are properly referenced as ${variable}, as this allows the shell to differentiate between ${var}iable (the variable $var followed by the text “iable”) and ${variable} (the variable $variable). This can be useful when applying suffixes to variables, such as “${kb}Kb is $bytes bytes, or approx ${mb}Mb”:

cat mb2.sh
echo -n "Enter a size in Kb: "
read kb
bytes='expr $kb \* 1024'
mb='expr $kb / 1024'
echo "${kb}Kb is ${bytes} bytes, or approx ${mb}Mb."
$ ./mb2.sh
Enter a size in Kb: 12345
12345Kb is 12641280 bytes, or approx 12Mb.
$

If the curly brackets were not there, then ${kb}Kb would become $kbKb, and as a variable called kbKb has not been defined, it will evaluate to the empty string.

note.ai

In the context of a string, an undefined variable is interpreted as an empty string. If it were being treated as a number, it would be interpreted as zero.

With the curly brackets removed, the script runs like this:

cat mb1.sh
echo -n "Enter a size in Kb: "
read kb
bytes='expr $kb \* 1024'
mb='expr $kb / 1024'
echo "$kbKb is $bytes bytes, or approx $mbMb."
$ ./mb1.sh Enter a size in Kb: 12345   is 12641280 bytes, or ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.