declare

Declare variables with attributes.

Source: src/execution/builtins.f90:3249-3446

Synopsis

declare [-aAfFirx] [name[=value] ...]
typeset [-aAfFirx] [name[=value] ...]

Description

The declare builtin (also available as typeset) declares variables and sets attributes. It can also display variables and functions.

Options

OptionDescription
-aIndexed array
-AAssociative array
-fDisplay functions
-FDisplay function names only
-iInteger attribute
-rReadonly attribute
-xExport attribute
-pDisplay in reusable format

Usage

Declare Variables

declare myvar              # Declare without value
declare myvar="value"      # Declare with value
declare -i count=0         # Integer variable
declare -r CONST="fixed"   # Readonly variable
declare -x EXPORTED="env"  # Exported variable

Arrays

# Indexed array
declare -a arr
arr=(one two three)

# Associative array
declare -A map
map[key]="value"

Display Variables

declare -p myvar
# declare -- myvar="value"

declare -p arr
# declare -a arr=([0]="one" [1]="two" [2]="three")

Display Functions

declare -f            # Show all functions with bodies
declare -F            # Show function names only
declare -f funcname   # Show specific function

Examples

Integer Arithmetic

declare -i num=5
num=num+3             # No $(()) needed
echo $num             # 8

num="hello"           # Evaluates to 0
echo $num             # 0

Readonly Constants

declare -r PI=3.14159
declare -r VERSION="1.0.0"

PI=3                  # Error: PI is readonly

Export and Declare

declare -x PATH="$PATH:/new/path"

# Equivalent to:
export PATH="$PATH:/new/path"

Local Variables in Functions

myfunc() {
    local -i count=0
    local -a items=()
    local -A cache=()

    # Use variables...
}

Attribute Combinations

declare -ri MAX_SIZE=100     # Readonly integer
declare -ax PATHS            # Exported array
declare -Ar CONFIG           # Readonly associative array

Display Format

declare -p var

Output format:

  • declare -- var="value" - Plain variable
  • declare -i var="5" - Integer
  • declare -r var="const" - Readonly
  • declare -x var="env" - Exported
  • declare -a var=([0]="a" [1]="b") - Indexed array
  • declare -A var=([k1]="v1" [k2]="v2") - Associative array

Implementation

Source: builtins.f90:3249-3446

Key behaviors:

  • -a calls declare_indexed_array(shell, var_name)
  • -A calls declare_associative_array(shell, var_name)
  • -r sets shell%variables(i)%readonly = .true.
  • -x sets shell%variables(i)%exported = .true.

Exit Status

StatusCondition
0Success
1Invalid option or variable name
1Assignment to readonly variable

Differences from Assignment

Featuredeclare var=xvar=x
Scope in functionLocalGlobal
AttributesSupportedNo
ArraysCreates properlyImplicit

Notes

  • In functions, declare creates local variables by default
  • typeset is an alias for declare
  • -p without names shows all declared variables

See Also