9.2. Typing variables: declare or typeset
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/typeset options
- -r readonly
-
(declare -r var1 works the same as readonly var1)
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++ ))
|
- -i integer
-
declare -i number
number=3
echo "Number = $number"
number=three
echo "Number = $number"
|
Certain arithmetic operations are permitted for declared integer variables without the need for expr or let.
n=6/3
echo "n = $n"
declare -i n
n=6/3
echo "n = $n"
|
- -a array
-
The variable indices will be treated as an array.
- -f function(s)
-
A declare -f line with no arguments in a script causes a listing of all the functions previously 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-10. Using declare to type variables
#!/bin/bash
func1 ()
{
echo This is a function.
}
declare -f
echo
declare -i var1
var1=2367
echo "var1 declared as $var1"
var1=var1+1
echo "var1 incremented by 1 is $var1."
echo "Attempting to change var1 to floating point value, 2367.1."
var1=2367.1
echo "var1 is still $var1"
echo
declare -r var2=13.36
echo "var2 declared as $var2"
var2=13.37
echo "var2 is still $var2"
exit 0
|
|
Using the declare builtin restricts the scope of a variable.
foo ()
{
FOO="bar"
}
bar ()
{
foo
echo $FOO
}
bar
|
However . . .
foo (){
declare FOO="bar"
}
bar ()
{
foo
echo $FOO
}
bar
|
|
9.2.1. Another use for declare
The declare command can be helpful in identifying variables, environmental or otherwise. This can be especially useful with arrays.
bash$ declare | grep HOME
HOME=/home/bozo
bash$ zzy=68
bash$ declare | grep zzy
zzy=68
bash$ Colors=([0]="purple" [1]="reddish-orange" [2]="light green")
bash$ echo ${Colors[@]}
purple reddish-orange light green
bash$ declare | grep Colors
Colors=([0]="purple" [1]="reddish-orange" [2]="light green")
|