# this is needed so that the bad assignments (b[]=bcde, for example) do not # cause fatal shell errors when in posix mode set +o posix set +a # The calls to egrep -v are to filter out builtin array variables that are # automatically set and possibly contain values that vary. # make sure declare -a converts an existing variable to an array unset a a=abcde declare -a a echo ${a[0]} unset a a=abcde a[2]=bdef declare -a b[256] unset c[2] unset c[*] a[1]= _ENV=/bin/true x=${_ENV[(_$-=0)+(_=1)-_${-%%*i*}]} declare -r c[100] echo ${a[0]} ${a[4]} echo ${a[@]} echo ${a[*]} # this should print out values, too declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' unset a[7] echo ${a[*]} unset a[4] echo ${a[*]} echo ${a} echo "${a}" echo $a unset a[0] echo ${a} echo ${a[@]} a[5]="hello world" echo ${a[5]} echo ${#a[5]} echo ${#a[@]} a[4+5/2]="test expression" echo ${a[@]} readonly a[5] readonly a # these two lines should output `declare' commands readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' declare -ar | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' # this line should output `readonly' commands, even for arrays set -o posix readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' set +o posix declare -a d='([1]="" [2]="bdef" [5]="hello world" "test")' d[9]="ninth element" declare -a e[10]=test declare -a e[10]='(test)' pass=/etc/passwd declare -a f='("${d[@]}")' b=([0]=this [1]=is [2]=a [3]=test [4]="$PS1" [5]=$pass) echo ${b[@]:2:3} declare -pa | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' a[3]="this is a test" b[]=bcde b[*]=aaa echo ${b[ ]} c[-2]=4 echo ${c[-4]} d[7]=(abdedfegeee) d=([]=abcde [1]="test test" [*]=last [-65]=negative ) unset d[12] unset e[*] declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' ps1='hello' unset ps1[2] unset ${ps1[2]} declare +a ps1 declare +a c # the prompt should not print when using a here doc read -p "array test: " -a rv <