mirror of https://github.com/tLDP/LDP
110 lines
3.1 KiB
Bash
110 lines
3.1 KiB
Bash
#!/bin/bash
|
|
# ex9.sh
|
|
|
|
# Variables: assignment and substitution
|
|
|
|
a=375
|
|
hello=$a
|
|
# ^ ^
|
|
|
|
#-------------------------------------------------------------------------
|
|
# No space permitted on either side of = sign when initializing variables.
|
|
# What happens if there is a space?
|
|
|
|
# "VARIABLE =value"
|
|
# ^
|
|
#% Script tries to run "VARIABLE" command with one argument, "=value".
|
|
|
|
# "VARIABLE= value"
|
|
# ^
|
|
#% Script tries to run "value" command with
|
|
#+ the environmental variable "VARIABLE" set to "".
|
|
#-------------------------------------------------------------------------
|
|
|
|
|
|
echo hello # hello
|
|
# Not a variable reference, just the string "hello" ...
|
|
|
|
echo $hello # 375
|
|
# ^ This *is* a variable reference.
|
|
echo ${hello} # 375
|
|
# Likewise a variable reference, as above.
|
|
|
|
# Quoting . . .
|
|
echo "$hello" # 375
|
|
echo "${hello}" # 375
|
|
|
|
echo
|
|
|
|
hello="A B C D"
|
|
echo $hello # A B C D
|
|
echo "$hello" # A B C D
|
|
# As we see, echo $hello and echo "$hello" give different results.
|
|
# =======================================
|
|
# Quoting a variable preserves whitespace.
|
|
# =======================================
|
|
|
|
echo
|
|
|
|
echo '$hello' # $hello
|
|
# ^ ^
|
|
# Variable referencing disabled (escaped) by single quotes,
|
|
#+ which causes the "$" to be interpreted literally.
|
|
|
|
# Notice the effect of different types of quoting.
|
|
|
|
|
|
hello= # Setting it to a null value.
|
|
echo "\$hello (null value) = $hello" # $hello (null value) =
|
|
# Note that setting a variable to a null value is not the same as
|
|
#+ unsetting it, although the end result is the same (see below).
|
|
|
|
# --------------------------------------------------------------
|
|
|
|
# It is permissible to set multiple variables on the same line,
|
|
#+ if separated by white space.
|
|
# Caution, this may reduce legibility, and may not be portable.
|
|
|
|
var1=21 var2=22 var3=$V3
|
|
echo
|
|
echo "var1=$var1 var2=$var2 var3=$var3"
|
|
|
|
# May cause problems with legacy versions of "sh" . . .
|
|
|
|
# --------------------------------------------------------------
|
|
|
|
echo; echo
|
|
|
|
numbers="one two three"
|
|
# ^ ^
|
|
other_numbers="1 2 3"
|
|
# ^ ^
|
|
# If there is whitespace embedded within a variable,
|
|
#+ then quotes are necessary.
|
|
# other_numbers=1 2 3 # Gives an error message.
|
|
echo "numbers = $numbers"
|
|
echo "other_numbers = $other_numbers" # other_numbers = 1 2 3
|
|
# Escaping the whitespace also works.
|
|
mixed_bag=2\ ---\ Whatever
|
|
# ^ ^ Space after escape (\).
|
|
|
|
echo "$mixed_bag" # 2 --- Whatever
|
|
|
|
echo; echo
|
|
|
|
echo "uninitialized_variable = $uninitialized_variable"
|
|
# Uninitialized variable has null value (no value at all!).
|
|
uninitialized_variable= # Declaring, but not initializing it --
|
|
#+ same as setting it to a null value, as above.
|
|
echo "uninitialized_variable = $uninitialized_variable"
|
|
# It still has a null value.
|
|
|
|
uninitialized_variable=23 # Set it.
|
|
unset uninitialized_variable # Unset it.
|
|
echo "uninitialized_variable = $uninitialized_variable"
|
|
# uninitialized_variable =
|
|
# It still has a null value.
|
|
echo
|
|
|
|
exit 0
|