En este post voy a explicar una cosa muy simple: cómo concatenar cadenas en bash, el lenguaje (o como se le diga) en el que se escriben los scripts de Linux.
Concatenar cadenas es crear una nueva cadena a partir de la unión de otras. Por ejemplo, si concatenamos “Hola” y ” mundo” obtenemos una cadena que dice “Hola mundo”.
Justamente eso haremos con bash y algunas variables para concatenar cadenas.
Por cierto, también mostraré cómo concatenar cadenas y ponerles un guión bajo, pues ese fue un problema al que me enfrenté cuando programé el script para respaldar una base de datos periódicamente.
Concatenar cadenas con Bash
Para concatenar simplemente creamos una nueva cadena y dentro de las comillas ponemos el nombre de las otras cadenas. Veamos este ejemplo:
nombre="Luis"
nombre_mascota="Maggie"
unidos="$nombre$nombre_mascota"
echo $unidos
Dentro de comillas dobles ponemos la variable con un signo de dólar al inicio, para evaluarlas como variables.
Concatenar y agregar texto
Igualmente podemos formatear una cadena y agregar el contenido de variables dentro del mismo. Veamos otro ejemplo:
nombre="Luis"
nombre_mascota="Maggie"
# Para concatenar simplemente las ponemos en la misma cadena
saludo="Hola, me llamo $nombre y mi mascota se llama $nombre_mascota"
echo $saludo
Dentro de la cadena ponemos el nombre de las variables y bash se encargará de evaluarlas.
Concatenar en bash con guión bajo
Habrá ocasiones en las que se desee concatenar una variable con otra, usando un guión bajo. Algo así:
nombre="Luis"
nombre_mascota="Maggie"
# Cuidado al concatenar, pues a veces hay problemas con los guiones bajos. Así:
mensaje="El correo de $nombre_mascota es $nombre_mascota_123@gmail.com"
# Salida esperada es Maggie_123 pero bash interpreta que hay una variable llamada $nombre_mascota_123
echo $mensaje
# Salida es: El correo de Maggie es @gmail.com
Si observamos bien, queremos concatenar la variable con la cadena "_123"
pero el problema es que bash toma la variable como si se llamara nombre_mascota_123
ya que el guión bajo sigue siendo un carácter válido para el nombre.
Solución
La solución es usar otra manera de evaluar la cadena, usando ahora ${}
(me recuerda a las backticks de JavaScript). Entonces el código debería quedar así:
nombre="Luis"
nombre_mascota="Maggie"
# Si queremos concatenar con guiones bajos, entonces:
mensaje="El correo de $nombre_mascota es ${nombre_mascota}_123@gmail.com"
echo $mensaje
De esta manera ponemos un delimitador de la expresión, así no hay problema si después hay un guión bajo o cualquier otro símbolo que sea válido al nombrar variables.
Probar todo lo que acabamos de hacer
Si quieres ejecutar el código crea un script de Linux y ejecútalo, asegúrate de darle permisos de ejecución.
Eso es todo por hoy. Te invito a leer más sobre Linux.