Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo eliminar el espacio en blanco sobrante de una variable Bash?

15 de diciembre de 2008

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

#1

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

7 octubre 2014, 11:32