2011-10-07 21 views
6

El problema es simple.Concatenación de espacio en blanco en Bash

for i in `seq $begin $progress_length` ; do 
    progress_bar=$progress_bar'#' 
done 

for i in `seq $middle $end` ; do 
    empty_space=$empty_space' ' 
done 

Necesito empty_space para posicionar el contenido después de la barra de progreso. He esperado que sea una cadena de x espacios en blanco. Pero finalmente la cadena está vacía. ¿Cómo puedo crear una cadena de x espacios en blanco?

Respuesta

7

El problema puede ser porque $empty_space tiene solo espacios. Luego, a la salida de ellos tienes que rodear entre comillas dobles:

echo "${empty_space}some_other_thing" 

Usted puede tratar de salida más interesante con printf por ejemplo, para obtener varios espacios. Por ejemplo, para escribir 20 espacios:

v=`printf '%20s' ' '` 
+0

.. y la barra de progreso '#' también _ puede escribirse con 'printf (1)', probablemente simplificando ambas rutinas. – sarnold

+0

Gracias por una respuesta. Intenté "$ {empty_space}" antes, pero no funciona. Evento empty_space = 'printf '% 20s' ''' no funciona :(. Bash es raro. – ciembor

+1

@ciembor: ¿Qué quieres decir con que 'empty_space =" $ {empty_space} "' no funciona? Añade un espacio para 'empty_space'. ¿Cómo está comprobando el valor más tarde? ¿Presumiblemente imprimiéndolo en su pantalla? ¿Está citando entonces? Es decir, debe hacer' echo "[$ {progress_bar} $ {empty_space}]" ' , no 'echo [$ {progress_bar} $ {empty_space}]'. – Cascabel

1

Las cadenas se pueden crear mediante la sustitución de parámetros. La sustitución $ {str: offset: longitud} devuelve una subcadena de str:

space80='                    ' 
hash80='################################################################################' 

progress_bar=${hash80:0:$progress_length-$begin+1} 
empty_space=${space80:0:$end-$middle+1} 

echo -n "$empty_space$progress_bar" 
0

entiendo su problema, ya que tenía exactamente la misma.

Mi solución fue para concatenar un carácter temporal en lugar de un espacio en blanco, digamos por ejemplo , y luego, al final, sustituir todas sus ocurrencias con sed por un espacio en blanco:

echo $myString | sed 's/☼/ /g' 

espero que así sea ayudarte !

Cuestiones relacionadas