declare -A BASH_ALIASES=() declare -A BASH_CMDS=() declare -A fluff declare -A BASH_ALIASES=() declare -A BASH_CMDS=() declare -A fluff=([foo]="one" [bar]="two" ) declare -A fluff=([foo]="one" [bar]="two" ) declare -A fluff=([bar]="two" ) declare -A fluff=([qux]="assigned" [bar]="newval" ) ./assoc.tests: line 41: chaff: four: must use subscript when assigning associative array declare -A BASH_ALIASES=() declare -A BASH_CMDS=() declare -Ai chaff=([one]="10" [zero]="5" ) declare -Ar waste=([pid]="42134" [lineno]="43" [source]="./assoc.tests" [version]="4.0-devel" ) declare -A wheat=([two]="b" [three]="c" [one]="a" [zero]="0" ) declare -A chaff=(["hello world"]="flip" [one]="10" [zero]="5" ) ./assoc.tests: line 53: waste: readonly variable ./assoc.tests: line 54: unset: waste: cannot unset: readonly variable declare -A chaff=(["*"]="12" ["hello world"]="flip" [one]="a" ) flip argv[1] = argv[2] = argv[3] = <12> argv[4] = argv[5] = argv[1] = argv[2] = <12> argv[3] = argv[4] = argv[1] = argv[2] = argv[3] = <12> argv[4] = argv[5] = argv[1] = ./assoc.tests: line 73: declare: chaff: cannot destroy array variables in this way declare -A wheat=([six]="6" ["foo bar"]="qux qix" ) argv[1] = argv[2] = argv[1] = declare -A wheat=([six]="6" ["foo bar"]="qux qix" ) argv[1] = <2> ./assoc.tests: line 101: [$unset]: bad array subscript 0 argv[1] = <7> argv[1] = argv[2] = argv[3] = argv[1] = argv[1] = <16> argv[1] = <16> argv[1] = <6> argv[2] = argv[1] = argv[2] = argv[3] = argv[1] = argv[2] = 8 /usr/local/bin /bin . /usr/bin /usr/ucb /usr/sbin /bin /sbin bin bin . bin ucb sbin bin sbin bin / / / / / / / / argv[1] = argv[1] = argv[1] = argv[1] = 8 /usr/local/bin /bin . /usr/bin /usr/ucb /usr/sbin /bin /sbin bin bin . bin ucb sbin bin sbin / / / / / / / 8 4 -- /bin ^usr^local^bin ^bin . ^usr^bin ^usr^ucb ^usr^sbin ^bin ^sbin ^usr^local^bin ^bin . ^usr^bin ^usr^ucb ^usr^sbin ^bin ^sbin \usr/local/bin \bin . \usr/bin \usr/ucb \usr/sbin \bin \sbin \usr\local\bin \bin . \usr\bin \usr\ucb \usr\sbin \bin \sbin \usr\local\bin \bin . \usr\bin \usr\ucb \usr\sbin \bin \sbin ([a]=1) assoc1.sub foo qux /usr/sbin/foo /usr/local/bin/qux hits command 0 /usr/sbin/foo 0 /bin/sh 0 /sbin/blat 0 /usr/local/bin/qux foo sh blat qux /usr/sbin/foo /bin/sh /sbin/blat /usr/local/bin/qux assoc2.sub foo qux argv[1] = argv[2] = argv[3] = <-l> alias blat='cd /blat ; echo $PWD' alias foo='/usr/sbin/foo' alias qux='/usr/local/bin/qux -l' alias sh='/bin/bash --login -o posix' blat foo sh qux argv[1] = argv[2] = argv[3] = argv[4] = assoc3.sub outside: outside declare -A BASH_ALIASES=() declare -A BASH_CMDS=() declare -A afoo=([six]="six" ["foo bar"]="foo quux" ) argv[1] = argv[2] = argv[3] = outside 2: outside assoc4.sub argv[1] = argv[1] = <> argv[2] = argv[3] = <> argv[4] = argv[1] = argv[1] = <> argv[2] = argv[3] = <> argv[4] = argv[1] = argv[1] = <> argv[2] = argv[3] = <> argv[4] = argv[1] = argv[1] = <> argv[2] = argv[3] = <> argv[4] = argv[1] = argv[1] = <> argv[2] = argv[3] = <> argv[4] = assoc5.sub abc def def ./assoc5.sub: line 26: declare: `myarray[foo[bar]=bleh': not a valid identifier def bleh abc myarray=(["]"]="def" [foo]="bleh" ["a]a"]="abc" ["a]=test1;#a"]="123" ) 123 myarray=(["]"]="def" ["a]=test2;#a"]="def" [foo]="bleh" ["a]a"]="abc" ["a]=test1;#a"]="123" ) assoc6.sub bar"bie doll declare -A foo=(["bar\"bie"]="doll" ) bar"bie doll declare -A foo=(["bar\"bie"]="doll" ) bar"bie doll declare -A foo=(["bar\"bie"]="doll" ) bar"bie doll declare -A foo=(["bar\"bie"]="doll" ) bar"bie doll declare -A foo=(["bar\"bie"]="doll" ) bar'bie doll declare -A foo=(["bar'bie"]="doll" ) bar'bie doll declare -A foo=(["bar'bie"]="doll" ) bar'bie doll declare -A foo=(["bar'bie"]="doll" ) bar'bie doll declare -A foo=(["bar'bie"]="doll" ) bar'bie doll declare -A foo=(["bar'bie"]="doll" ) bar$bie doll declare -A foo=(["bar\$bie"]="doll" ) bar[bie doll declare -A foo=(["bar[bie"]="doll" ) bar`bie doll declare -A foo=(["bar\`bie"]="doll" ) bar\]bie doll declare -A foo=(["bar\\]bie"]="doll" ) bar${foo}bie doll declare -A foo=(["bar\${foo}bie"]="doll" ) assoc7.sub bar after printf after use: 0 declare -A assoc=([0]="assoc" ) assoc declare -A assoc=([two]="twoless" [three]="three" [one]="onemore" ) declare -Ar assoc=([two]="twoless" [three]="three" [one]="onemore" ) declare -A hash=([key]="value1" ) declare -A hash=([key]="value1 value2" ) assoc8.sub assoc9.sub declare -A b=([")"]="" ["\""]="" ["]"]="" ["\\"]="" ["\`"]="" ) declare -A b=(["]"]="" ["\`"]="" ) declare -A dict=(["'"]="3" ["\""]="1" ["\\"]="4" ["\`"]="2" ) declare -A dict=() declare -A dict=(["'"]="3" ["\""]="1" ["\\"]="4" ["\`"]="2" ) declare -A dict=() 4 4 a[$b]= 5 declare -A a=(["80's"]="Depeche Mode" ) ./assoc9.sub: line 84: read: `a[80's]': not a valid identifier declare -A a declare -A a=(["80's"]="Depeche Mode" ) ./assoc9.sub: line 96: printf: `a[80's]': not a valid identifier declare -A a declare -A a=(["80's"]="Depeche Mode" ) 6 1 1+5 declare -A a=(["\$(date >&2)"]="5" ) declare -A myarray=([foo]="bleh" ["foo[bar"]="bleh" ) foo declare -A assoc=(["\$var"]="value" ) declare -A assoc=(["\$var"]="value" ) declare -A assoc=(["\$var"]="value" ) declare -A assoc=() ./assoc9.sub: line 154: typeset: `foo[foo]bar]=bax': not a valid identifier foo]bar bip declare -A foo=(["foo]bar"]="bip" ) assoc10.sub ./assoc10.sub: line 14: declare: a: cannot convert indexed to associative array f: declare -a a ./assoc10.sub: line 17: declare: a: cannot convert associative to indexed array f: declare -A a f: declare -a a main: declare -- a="7" f: declare -A a main: declare -- a="42" assoc11.sub declare -A a=([3]="" [1]="2" ) declare -A foo=([d]="4" [c]="3" [b]="2" [a]="1" ) foo=( d "4" c "3" b "2" a "1" ) declare -A foo=(["\\"]="5" ["@"]="3" ["holy hell this works"]="4" ["a b"]="1" ["spa ces"]="2" ) foo=( echo "\\" "5" "@" "3" "holy hell this works" "4" "a b" "1" "spa ces" "2" ) ./assoc11.sub: line 34: "": bad array subscript declare -A foo=([";"]="semicolon" ["]"]="def" [a=b]="assignment" ["a]a"]="abc" ["foo[bar"]="bleh" ) foo=( ";" "semicolon" "]" "def" a=b "assignment" "a]a" "abc" "foo[bar" "bleh" ) declare -A foo=(["'"]="squote" ["\""]="dquote" ["\\"]="bslash" ["\`"]="backquote" ) foo=( "'" "squote" "\"" "dquote" "\\" "bslash" "\`" "backquote" ) declare -A foo=(["bar]bie"]="doll" ["a]=test1;#a"]="123" ["bar\"bie"]="doll" ) foo=( "bar]bie" "doll" "a]=test1;#a" "123" "bar\"bie" "doll" ) declare -A inside=([c]="3" [b]="2" [a]="1" ) inside=( c "3" b "2" a "1" ) declare -A dict=(["?"]="quest" ["*"]="star" ["'"]="squote" ["\$"]="dol" ["\""]="dquote" ["\\"]="bslash" ["@"]="at" ["}"]="rbrace" ["{"]="lbrace" ["\`"]="bquote" ) dict=( "?" "quest" "*" "star" "'" "squote" "\$" "dol" "\"" "dquote" "\\" "bslash" "@" "at" "}" "rbrace" "{" "lbrace" "\`" "bquote" ) declare -A foo=([two]="" [one]="1" ) foo=( two "" one "1" ) rparen dquote rbracket bs declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" ) ")" "rparen" "\"" "dquote" "]" "rbracket" "\\" "bs" declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" ) declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" ) declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" ) declare -Arx foo=([two]="2" [three]="3" [one]="1" ) ./assoc11.sub: line 90: foo: readonly variable assoc12.sub declare -A v1=(["1 2"]="3" ) declare -A v2=(["1 2"]="3" ) declare -A v3=(["1 2"]="3" ) declare -A v1=(["1 2"]="3 4 5" ) declare -A v2=(["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ) declare -A v1=(["1 2"]="3 4 5" ) declare -A v2=(["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ) declare -A v1=(["1 2"]="3 4 5" ) declare -A v2=(["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ) declare -A v1=(["20 40 80"]="xtra" ["1 2"]="3 4 5" ) declare -A v2=(["20 40 80"]="xtra" ["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="xtra" ) declare -A v1=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" ) declare -A v2=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="new xtra" ) assoc13.sub declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="at" ) at star declare -A a=(["@"]="at" ) ./assoc13.sub: line 35: ia[@]: bad array subscript declare -a ia declare -A a=(["@"]="at2" ) declare -A a=(["@"]=" string" ) declare -A a=(["*"]="star2" ["@"]="at" ) assoc14.sub declare -A assoc=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" ) argv[1] = argv[2] = argv[3] = argv[4] = <1> argv[1] = argv[2] = argv[3] = argv[4] = argv[5] = argv[6] = argv[7] = argv[8] = <1> argv[1] = argv[1] = argv[1] = argv[2] = argv[3] = argv[4] = argv[5] = argv[6] = <1> argv[7] = argv[8] = argv[1] = <'hello'> argv[2] = <'world'> argv[3] = <'key with spaces'> argv[4] = <'value with spaces'> argv[5] = <'one'> argv[6] = <'1'> argv[7] = <'foo'> argv[8] = <'bar'> argv[1] = <'hello'> argv[2] = <'world'> argv[3] = <'key with spaces'> argv[4] = <'value with spaces'> argv[5] = <'one'> argv[6] = <'1'> argv[7] = <'foo'> argv[8] = <'bar'> declare -A clone=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" ) declare -A posparams=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" ) assoc15.sub declare -A var=([$'\001']=$'\001\001\001\001' ) declare -A v2=([$'\001']=$'\001\001\001\001' ) argv[1] = <^A> argv[2] = <^A^A^A^A> declare -A foo=([$'\001']=$'\001\001\001\001' ) declare -A var=([$'\001']=$'\001\001\001\001' ) argv[1] = <^A> argv[2] = <^A^A^A^A> declare -A foo=([$'\001']=$'\001\001\001\001' ) declare -A var=([$'\001']=$'\001\001\001\001' ) argv[1] = <^A> argv[2] = <^A^A^A^A> declare -A foo=([$'\001']=$'\001\001\001\001' ) declare -a var=([0]=$'\001\001\001\001') argv[1] = <$'\001\001\001\001'> declare -a foo=([0]=$'\001\001\001\001') declare -a var=([0]=$'\001\001\001\001') argv[1] = <$'\001\001\001\001'> declare -a foo=([0]=$'\001\001\001\001') declare -A var=([two]=$'ab\001cd' [one]=$'\001\001\001\001' ) declare -A foo=([two]=$'ab\001cd' [one]=$'\001\001\001\001' ) declare -A foo=([$'\001']=$'ab\001cd' ) declare -A foo=([$'\001']=$'\001\001\001\001' ) assoc16.sub declare -A A=(["\$(echo Darwin ; echo stderr>&2)"]="darjeeling" [Darwin]="darjeeling" ) stderr darjsharking darjsharking stderr darj darj stderr DARJEELING DARJEELING stderr 'darjeeling' 'darjeeling' stderr darjeel darjeel stderr 10 10 stderr darjeeling darjeeling stderr set set stderr set set stderr 42 42 assoc17.sub declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() assoc18.sub declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() 5: ok 1 assoc19.sub declare -A aa=([key]="/homes/cj/Desktop" ) declare -A aa=([key]="/homes/cj/Desktop" ) declare -A aa=([k2]="/homes/cj/Library" [key]="/homes/cj/Desktop" ) declare -A aa=([/homes/cj/key]="/homes/cj/Desktop" ) declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop" ) declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop:/homes/cj/Documents:/homes/cj/Applications" ) declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop:/homes/cj/Documents:/homes/cj/Applications" )