Re: Question about associative array runtime assignment vs literal initialization

Félix Hauri via Bug reports for the GNU Bourne Again SHell <[email protected]>
Newsgroups gmane.comp.shells.bash.bugs
Message-ID <[email protected]>
Le Mon, Dec 22, 2025 at 08:01:13PM +0100, Félix Hauri via Bug reports for the GNU Bourne Again SHell a écrit :
> Note: there's no ``eval'', but `declare -A` work like an eval!
> If instead of ``%q'', I've used ``%s'', then ``$(date)'' will be executed!
> 
>   $ declare -A aa=( empty '' inject '$(date)' "space key" "space value" \
>         lb \[ rb \] punc $' \t\n' )
>   $ printf -v tmpString '[%q]="%s" ' "${aa[@]@k}"
>   $ declare -A "newarray=($tmpString)"
>   $ declare -p newarray
>   declare -A newarray=([inject]="Mon Dec 22 19:57:41 CET 2025" [lb]="[" ["space ke
>   y"]="space value" [empty]="" [punc]=$' \t\n' [rb]="]" )
Or even:

  $ declare -A aa=( empty '' inject '$(date)' "space key" "space value"  \
        '$(uptime)' injected  lb \[ rb \] punc $' \t\n' )
  $ printf -v tmpString '["%s"]="%s" ' "${aa[@]@k}"
  $ declare -A "newarray=($tmpString)"
  $ declare -p newarray
  declare -A newarray=([inject]="Mon Dec 22 20:16:59 CET 2025" [lb]="[" ["space ke
  y"]="space value" [empty]="" [punc]=$' \t\n' [rb]="]" [" 20:16:59 up 1 days, 10:
  18, 1 users,  load average: 0.18, 0.12, 0.23"]="injected" )


--
 Félix Hauri
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.