Copy a Bash array with empty elements Copy a Bash array with empty elements bash bash

Copy a Bash array with empty elements


You have a quoting problem and you should be using @, not *. Use:

copy=( "${array[@]}" )

From the bash(1) man page:

Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts with pathname expansion. If subscript is @ or *, the word expands to all members of name. These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS special variable, and ${name[@]} expands each element of name to a separate word.

Example output after that change:

--- array (3) ---onethree--- copy (3) ---onethree


Starting with Bash 4.3, you can do this

$ alpha=(bravo charlie 'delta  3' '' foxtrot)$ declare -n golf=alpha$ echo "${golf[2]}"delta  3