No shell de peixe, como posso juntar uma matriz com um separador personalizado?

4

Eu tenho uma matriz cujos elementos podem conter espaços:

set ASD "a" "b c" "d"

Como posso converter esse array em uma única string de valores separados por vírgula?

# what I want:
"a,b c,d"

Até agora, o mais próximo que consegui foi converter o array em uma string e depois substituir todos os espaços. O problema é que isso só funciona se os elementos da matriz não contiverem espaços próprios

(echo $ARR | tr ' ' ',')
    
por hugomg 24.05.2015 / 04:31

2 respostas

7

A catenação variável é mais simples:

echo -s ,$ASD

Isso adiciona uma vírgula extra ao início. Se você quiser removê-lo, você pode usar cut :

echo -s ,$ASD | cut -b 2-

Para completar, você também pode colocá-lo depois e usar sed :

echo -s $ASD, | sed 's/,$//'

O list builtin pode tornar isso melhor, caso seja implementado.

fish 2.3.0 inclui o string builtin:

string join ',' $ASD
    
por 24.05.2015 / 07:00
1

Você pode usar printf e paste em vez de echo e tr :

printf '%s\n' $ASD | paste -sd,

AFAIK, fish não tem um caminho embutido para unir elementos de matriz.

    
por 24.05.2015 / 05:41

Tags