¿Usar sustitución de cadenas para combinar matrices?

¿Usar sustitución de cadenas para combinar matrices?

Estoy intentando utilizar la sustitución de cadenas para combinar una matriz. Producción:

a,b,c

Lo siguiente funciona, pero ¿no hay alguna manera de hacerlo sin tuberías?

#!/bin/bash

words=(a b c)

echo "${words[@]}" | sed 's/ /,/g'

Probé esto, que no funciona.

echo "${words[@]// /,/}"

Respuesta1

Si desea generar una cadena que consta de los elementos de una matriz delimitada por un carácter particular, utilice

words=(a b c)

( IFS=,; printf '%s\n' "${words[*]}" )

Usar *en lugar de @in "${words[*]}"creará una única cadena a partir de la concatenación de todos los elementos de la matriz words. Los elementos estarán delimitados por el primer carácter de $IFS, por eso lo ponemos en coma antes de hacer la expansión.

Configuré IFSun subshell para evitar configurarlo inadvertidamente para cualquier otra operación que no sea la expansión única necesaria para crear la cadena delimitada por comas para la printfllamada.

En lugar de usar un subshell para configurar IFSlocalmente, puedes configurarlo y luego restablecerlo:

words=(a b c)

IFS=,$IFS
printf '%s\n' "${words[*]}"
IFS=${IFS#?}

Esto primero agrega una coma como primer carácter de $IFS, conservando el valor anterior de la variable como los caracteres después de la coma.

La sustitución de parámetros ${IFS#?}eliminaría el primer carácter (la coma que agregamos).

información relacionada