Cómo concatenar variables de cadena en Bash

Bash no tiene un comando directo para concatenar cadenas. Sin embargo, Bash aún nos brinda múltiples formas de unirnos a ellos. ¡Veamos cuáles son!

Introducción

Las utilidades de Bash simplifican muchas tareas, pero no todas las tareas tienen un comando u operador directo. Una tarea muy común y habitual en muchos escenarios de secuencias de comandos es concatenar variables de cadena.

Bash no tiene una función integrada o una utilidad de línea de comandos para concatenar dos cadenas juntas. Sin embargo, hay muchas maneras de lograr esto.

Concatenación de cadenas en Bash

Los siguientes son los pasos mediante los cuales se pueden concatenar las cadenas, ordenados por el nivel de complicación:

  1. echo ambas variables
  2. Formatear usando printf
  3. Formatea usando awk
  4. Concatenar archivos de cadenas usando join

A lo largo del artículo, usaremos las variables - string1 y string2 que puede crear en su shell ingresando:

1
2
$ string1="Stuck"
$ string2="Together"

Concatenar cadenas en Bash con echo

Quizás el más simple de todos los trucos es simplemente hacer eco de ambas variables formateadas una al lado de la otra:

1
$ echo "${string1}" "${string2}"

Observe que tenemos un espacio en blanco entre ambas cadenas. El fragmento también se puede escribir como:

1
$ echo "${string1} ${string2}"

Ambos fragmentos darán el mismo resultado:

1
Stuck Together

Concatenar cadenas en Bash con printf

Intentemos concatenar las cadenas imprimiendo una salida formateada en el teletipo, es decir, terminal. Considere el siguiente fragmento, donde dos etiquetas de formato de cadena (%s) están divididas por un espacio vacío que está listo para ser sustituido por las dos variables: $cadena1 y $cadena2:

1
$ printf "%s %s\n" "$string1" "$string2"

Las dos etiquetas de formato, cuando se sustituyen con nuestra salida de variables de cadena:

1
Stuck Together

El formato de cadena puede sonarle familiar si está familiarizado con los lenguajes de programación. Si esto te parece abrumador, es bueno que aprendas qué hacen las diferentes etiquetas (como %s y %d), que podrían ser muy útiles.

Concatenar cadenas en Bash con awk

Un comando un poco menos conocido, el comando awk, invoca AWK, un lenguaje de secuencias de comandos diseñado específicamente para manipular texto y extraer cadenas de texto de él. No sorprende que un lenguaje de secuencias de comandos dedicado a manipular cadenas también tenga la capacidad de concatenarlas:

1
$ echo "$string1" "$string2" | awk '{printf "%s~%s\n",$1,$2}'

Vamos a dividir el comando anterior. Tenemos dos fragmentos encadenados entre sí (de ahí el operador de encadenamiento |). Estamos enviando las variables string1 y string2 como entradas al comando awk.

La sintaxis del comando awk es: awk '{alguna_operación}'.

En nuestro caso, estamos realizando una operación printf dentro. Nos referimos a las variables como $1 y $2; estos se refieren a las variables pasadas como argumentos del echo.

Solo para mostrar una variación aquí, estamos usando una tilde (~) que separa las etiquetas de formato. Por lo tanto, da la siguiente salida:

1
Stuck~Together

Concatenar cadenas en Bash con join

Ahora que se han elevado los estándares, probemos un último método. Intentemos almacenar nuestras cadenas en dos archivos separados con una columna cada uno. El archivo string1.txt contiene la palabra "Stuck" escrita dos veces en tres líneas. Igual que antes, string2.txt contendrá la palabra "Juntos" escrita dos veces en tres líneas y los siguientes comandos crean los archivos para nosotros:

1
2
3
4
$ echo "1 Stuck" > "string1.txt"
$ echo "2 Stuck" >> "string1.txt"
$ echo "1 Together" > "string2.txt"
$ echo "2 Together" >> "string2.txt"

Ambos archivos se pueden concatenar usando el siguiente comando:

1
$ join string1.txt string2.txt

Para que funcione el comando unir, ambos archivos deben tener una columna coincidente. En nuestro caso, tenemos la columna de índice coincidente y obtenemos la salida concatenada como se muestra a continuación:

1
2
1 Stuck Together
2 Stuck Together

Conclusión

Hay varias formas de realizar la concatenación de cadenas en scripts de bash. La elección del método depende del nivel de complejidad y de la naturaleza del problema. ¿Cuál escogerás?