2008-11-27 20 views
7

Suponiendo una variable contiene espacios, saltos de línea, y las pestañas seguido de texto, ¿por qué hace esto:quitar espacios en blanco de la fiesta de la variable

${var#"${var%%[![:space:]]*}"} # strip var of everything 
           # but whitespace 
           # then remove what's left 
           # (i.e. the whitespace) from var 

eliminar el espacio en blanco y dejar el texto, pero esto:

${var##[:space:]*} # strip all whitespace from var 

¿no?

Respuesta

26

Si configuro var=" This is a test ", ambas sugerencias no funcionan; solo se eliminan las cosas principales. Por qué no utilizar la funcionalidad que elimina reemplazar todas las apariciones de espacios en blanco y no sólo el primero: Respuesta

${var//[[:space:]]} 
4

[: espacio:] es una clase de caracteres. Solo es válido si está anidado dentro de otro conjunto de [].

+0

Gracias - No sabía que las clases de caracteres necesarios entre paréntesis anidados. – MCS

+0

@MCS - Esto está documentado en regex (7) ("man 7 regex" para leerlo). La mayoría de las implementaciones de expresiones regulares modernas incluyen soporte para las clases de caracteres nombradas POSIX, por lo que puede leer sobre ellas en la página man de perlre de perl, por ejemplo, también. – converter42

0

¿Qué hay de $ (echo $ var)

> a=" 123 456 " ; a2="$(echo $a)" ; echo "a=\"${a}\" a2=\"${a2}\"" 
a=" 123 456 " a2="123 456" 
Cuestiones relacionadas