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
	    [1]
	  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. |    1 declare -r var1=1
   2 echo "var1 = $var1"   # var1 = 1
   3 
   4 (( var1++ ))          # x.sh: line 4: var1: readonly variable |  
 
- -i integer
|    1 declare -i number
   2 # The script will treat subsequent occurrences of "number" as an integer.		
   3 
   4 number=3
   5 echo "Number = $number"     # Number = 3
   6 
   7 number=three
   8 echo "Number = $number"     # Number = 0
   9 # 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. |    1 n=6/3
   2 echo "n = $n"       # n = 6/3
   3 
   4 declare -i n
   5 n=6/3
   6 echo "n = $n"       # n = 2 |  
 
- -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. |    1 declare -f function_name |  
 - 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
|    1 #!/bin/bash
   2 
   3 func1 ()
   4 {
   5   echo This is a function.
   6 }
   7 
   8 declare -f        # Lists the function above.
   9 
  10 echo
  11 
  12 declare -i var1   # var1 is an integer.
  13 var1=2367
  14 echo "var1 declared as $var1"
  15 var1=var1+1       # Integer declaration eliminates the need for 'let'.
  16 echo "var1 incremented by 1 is $var1."
  17 # Attempt to change variable declared as integer.
  18 echo "Attempting to change var1 to floating point value, 2367.1."
  19 var1=2367.1       # Results in error message, with no change to variable.
  20 echo "var1 is still $var1"
  21 
  22 echo
  23 
  24 declare -r var2=13.36         # 'declare' permits setting a variable property
  25                               #+ and simultaneously assigning it a value.
  26 echo "var2 declared as $var2" # Attempt to change readonly variable.
  27 var2=13.37                    # Generates error message, and exit from script.
  28 
  29 echo "var2 is still $var2"    # This line will not execute.
  30 
  31 exit 0                        # Script will not exit here. | 
|  | Using the declare builtin
	  restricts the scope
	  of a variable.
	   |    1 foo ()
   2 {
   3 FOO="bar"
   4 }
   5 
   6 bar ()
   7 {
   8 foo
   9 echo $FOO
  10 }
  11 
  12 bar   # Prints bar. | 
 However . . .
	   |    1 foo (){
   2 declare FOO="bar"
   3 }
   4 
   5 bar ()
   6 {
   7 foo
   8 echo $FOO
   9 }
  10 
  11 bar  # Prints nothing.
  12 
  13 
  14 # Thank you, Michael Iatrou, for pointing this out. | 
 | 
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")
 	      |