2011-10-07 14 views
6

Il problema è semplice.Concatenazione di spazi bianchi in 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 

Ho bisogno empty_space per posizionare il contenuto dopo la barra di avanzamento. Mi aspettavo che fosse una stringa di x spazi bianchi. Ma finalmente la stringa è vuota. Come posso creare una stringa di spazi bianchi x?

risposta

7

Il problema potrebbe essere dovuto al fatto che lo $empty_space ha solo spazi. Poi, all'uscita li si deve circondare tra virgolette:

echo "${empty_space}some_other_thing" 

si può provare di uscita più interessante con printf ad esempio per ottenere diversi spazi. Ad esempio, per scrivere 20 spazi:

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

.. e la barra di avanzamento '# può _also_ essere scritto con' printf (1) ', probabilmente semplificando entrambe le routine. – sarnold

+0

Grazie per la risposta. Ho provato "$ {empty_space}" prima, ma non funziona. Event empty_space = 'printf '% 20s' ''' non funziona :(. Bash è strano – ciembor

+1

@ciembor: cosa vuoi dire, 'empty_space =" $ {empty_space} "' non funziona? spazio a 'empty_space'. Come stai verificando il valore in un secondo momento? Presumibilmente stampandolo sullo schermo? Stai citando allora? Cioè, devi fare" echo "[$ {progress_bar} $ {empty_space}]" ' , non 'echo [$ {progress_bar} $ {empty_space}]'. – Cascabel

1

Le stringhe possono essere create utilizzando la sostituzione dei parametri. La sostituzione $ {str: offset: lunghezza} restituisce una stringa di 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

capisco il tuo problema, come ho avuto esattamente lo stesso.

La mia soluzione era quella di concatenare una carattere temporaneo, invece di uno spazio bianco, diciamo per esempio , e poi, alla fine, sostituire tutte le occorrenze con sed da uno spazio bianco:

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

lo spero Aiutarti !