Caracteres de la pestaña Echo en Bash Script
Este artículo explica cómo “hacer eco” de uno o varios caracteres de “tabulador” cuando se usa un script Bash.
Caracteres de la pestaña Echo en Bash Script
El comando echo
es simple: imprime todo lo que se pasa a la terminal. Normalmente, si guarda una variable como algo como:
example=' 'testing
Si intenta imprimir esta variable con el comando echo '['$example']'
, obtendrá el siguiente resultado.
[ testing]
Esto no es lo que hemos ingresado o guardado en la variable. En el ejemplo anterior, usamos el carácter de tabulador
dos veces, pero todo lo que vemos es un solo espacio.
Cabe señalar que este comportamiento no es coherente en todos los shells. Por ejemplo, ejecutar el mismo script en el shell zsh
dará como resultado el siguiente resultado, que esperamos obtener.
[ testing]
Volviendo a los scripts de Bash, tenemos algunas formas de evitar esto.
Usa la bandera -e
La bandera -e
significa habilitar la interpretación de escapes de barra invertida
. Si estuvieras escribiendo el mismo ejemplo anterior, lo escribirías de la siguiente manera.
example='\t\t'testing
echo -e '['$example']'
Lo que da la salida:
[ testing]
La parte \t
representa una pestaña. Por lo tanto, como queríamos introducir dos pestañas, lo escribimos como \t\t
.
Una vez que se pasa la bandera -e
, el símbolo \t
se interpreta como una pestaña y se muestra según sea necesario.
Si no se usa el indicador -e
, como en el siguiente caso, \t
se leerá como cadenas literales y no se procesará como tabuladores.
example='\t\t'testing
echo '['$example']'
Lo que da la salida:
[\t\ttesting]
Cabe señalar que pasar la bandera no es POSIX; por lo tanto, esto no se puede usar de forma portátil, como en make
, en el que la bandera no está implementada. Por lo tanto, discutiremos algunas alternativas, incluido el casi universal printf
.
Por supuesto, esta parte se desvía ligeramente de lo que comenzamos, ya que abandonaremos el eco
por completo.
Usar comillas dobles
Podría decirse que esta es la solución más simple y no requiere ninguna explicación más que su sintaxis. Usted escribiría el comando de la siguiente manera.
example=' 'testing
echo "[$example]"
Lo que daría el resultado:
[ testing]
Use printf
en su lugar
Esta es la más portátil de las tres soluciones y la más recomendada. echo
tiene muchas implementaciones y versiones, pero printf
es casi lo mismo.
Incluso si se implementa por separado en cualquier lugar, se implementa de manera muy similar. Podemos ver esto como cualquier variación de los métodos anteriores daría como resultado el mismo resultado cuando se llama con zsh
, pero diferente cuando se llama con bash
.
La sintaxis para usar printf
se define a continuación.
example=' 'x
printf '%s\n' "[$example]"
Lo que da la salida:
[ x]
Como recomendación general, echo
funciona bien siempre que la salida necesaria sea un texto simple como hola
, pero para cualquier cosa compleja, usar echo
puede ser complicado debido a lo diferente que puede ser su comportamiento entre shells. En todos estos casos (caracteres especiales, etc.), se recomienda utilizar printf
en su lugar.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn