Por que esta primeira vírgula nessa matriz printf?

0

Eu quero colocar um cabeçalho no arquivo, mas recebo a primeira vírgula na saída. 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}"

Saída

,1,10
masi

Saída esperada

1,10
masi

Debian: 8.5
Bash: 4,30

    
por Léo Léopold Hertz 준영 03.11.2016 / 16:50

2 respostas

4

Você deixou de fora o

bar=${bar:1}

linha de a resposta que você vinculou ; você precisa de

header=${header:1}

antes de sua linha sed remover a vírgula inicial.

    
por 03.11.2016 / 17:00
3

Em vez de usar printf , por que não usar as substituições embutidas do bash? Na seção sobre Matrizes :

   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

Então você pode:

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

Você também pode usar sed para inserir uma linha inteira, como:

$ echo masi > foo
$ IFS=, sed -i "1i${ids[*]}" foo
$ cat foo
1,10
masi
$ 
    
por 03.11.2016 / 17:00

Tags