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.
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 ...