Uno de mis scripts tiene el siguiente código:
var=`hg st -R "$path"` if [ -n "$var" ]; then echo $var fi
El problema es que el código condicional siempre se ejecuta porque el comando hg st
siempre añade un carácter de nueva línea \n
.
¿Existe alguna forma de quitar todos los espacios en blanco sobrantes en el valor de una variable Bash? Me interesa algo similar a la función trim()
de PHP.
Aunque podría utilizar sed
o awk
, me gustaría saber si existe alguna solución más elegante para este problema.
Estás leyendo una traducción autorizada de la pregunta How to trim whitespace from bash variable? planteada por too much php en StackOverflow.
Respuestas
Usando el comando tr
es muy sencillo conseguir lo que quieres:
$ echo " prueba prueba prueba " | tr -d '[[:space:]]' // Resultado = 'pruebapruebaprueba'
Si quieres eliminar solamente los espacios por delante (ltrim()
) o por detrás (rtrim()
), tendrás que utilizar sed
.
Eliminar los espacios por detrás:
$ echo " prueba prueba prueba " | sed 's/[[:space:]]*$//' // Resultado = ' prueba prueba prueba'
Eliminar los espacios por delante:
$ echo " prueba prueba prueba " | sed 's/^[[:space:]]*//' // Resultado = 'prueba prueba prueba '
Eliminar los espacios por delante y por detrás, pero no por dentro:
$ echo " prueba prueba prueba " | sed 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' // Resultado = 'prueba prueba prueba'
Si necesitas eliminar los espacios en blanco directamente dentro del script Bash, el código resultante es un poco confuso:
var=" prueba prueba prueba " var="${var#"${var%%[![:space:]]*}"}" # elimina los espacios por delante var="${var%"${var##*[![:space:]]}"}" # elimina los espacios por detrás // Resultado = 'prueba prueba prueba'
@librosweb