Copy a Bash array with empty elements
arrays, bash, copy
Solution
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) ---
one
three
--- copy (3) ---
one
three
Problem
I'm having problems in bash (ver 4.2.25) copying arrays with empty elements. When I make a copy of an array into another variable, it does not copy any empty elements along with it. ``` #!/bin/bash array=( 'one' '' 'three' ) copy=( ${array[*]} ) IFS=$'\n' echo "--- array (${#array[*]}) ---" echo "${array[*]}" echo echo "--- copy (${#copy[*]}) ---" echo "${copy[*]}" ``` When I do this, here is the output: ``` --- array (3) --- one three --- copy (2) --- one three ``` The original array has all three elements including the empty element, but the copy does not. What am I doing wrong here?