¿Por qué esta primera coma en esta matriz printf?

¿Por qué esta primera coma en esta matriz printf?

Quiero poner un encabezado al archivo pero aparece la primera coma en el resultado. Código

#!/bash/bin
ids=(1 10)
filenameTarget=/tmp/result.csv
:> "${filenameTarget}"
echo "masi" > "${filenameTarget}"
header=$(printf ",%s" ${ids[@]}) # http://stackoverflow.com/a/2317171/54964
sed -i "1s/^/${header}\n/" "${filenameTarget}"

Producción

,1,10
masi

Rendimiento esperado

1,10
masi

Debian: 8.5
Bash: 4.30

Respuesta1

Dejaste fuera el

bar=${bar:1}

línea dela respuesta a la que te vinculaste; necesitas

header=${header:1}

antes de su sedlínea para eliminar la coma inicial.

Respuesta2

En lugar de utilizar printf, ¿por qué no utilizar las sustituciones integradas de bash? De la sección dematrices:

   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 sep‐
   arate  word.   When  there  are no array members, ${name[@]} expands to

Así que puedes:

$ IFS=,; echo "${ids[*]}"
1,10
$

También puedes usar sedpara insertar una línea completa, como:

$ echo masi > foo
$ IFS=, sed -i "1i${ids[*]}" foo
$ cat foo
1,10
masi
$ 

información relacionada