9.4. Typing variables: declare or
The declare or
typeset builtins, which are exact synonyms,
permit modifying the properties of variables. This is
a very weak form of the typing
available in certain programming languages. The
declare command is specific to version
2 or later of Bash. The typeset command
also works in ksh scripts.
(declare -r var1 works the same as
This is the rough equivalent of the C
const type qualifier. An attempt
to change the value of a readonly
variable fails with an error message.
declare -r var1=1
echo "var1 = $var1" # var1 = 1
(( var1++ )) # x.sh: line 4: var1: readonly variable
- -i integer
declare -i number
# The script will treat subsequent occurrences of "number" as an integer.
echo "Number = $number" # Number = 3
echo "Number = $number" # Number = 0
# Tries to evaluate the string "three" as an integer.
Certain arithmetic operations are permitted
for declared integer variables without the need
for expr or let.
echo "n = $n" # n = 6/3
declare -i n
echo "n = $n" # n = 2
The variable indices will be treated as
- -f function(s)
A declare -f line with no
arguments in a script causes a listing of all the
defined in that script.
A declare -f function_name
in a script lists just the function named.
- -x export
This declares a variable as available for exporting outside the
environment of the script itself.
- -x var=$value
The declare command permits
assigning a value to a variable in the same statement
as setting its properties.
Example 9-23. Using declare to type variables
echo This is a function.
declare -f # Lists the function above.
declare -i var1 # var1 is an integer.
echo "var1 declared as $var1"
var1=var1+1 # Integer declaration eliminates the need for 'let'.
echo "var1 incremented by 1 is $var1."
# Attempt to change variable declared as integer.
echo "Attempting to change var1 to floating point value, 2367.1."
var1=2367.1 # Results in error message, with no change to variable.
echo "var1 is still $var1"
declare -r var2=13.36 # 'declare' permits setting a variable property
#+ and simultaneously assigning it a value.
echo "var2 declared as $var2" # Attempt to change readonly variable.
var2=13.37 # Generates error message, and exit from script.
echo "var2 is still $var2" # This line will not execute.
exit 0 # Script will not exit here.
Using the declare builtin
restricts the scope
of a variable.
bar # Prints bar.
However . . .
bar # Prints nothing.
# Thank you, Michael Iatrou, for pointing this out.