2011-10-07 14 views
6

Problem jest prosty.Łączenie białych spacji w 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 

Potrzebuję empty_space do pozycjonowania treści po pasku postępu. Spodziewałem się, że będzie to ciąg x białych spacji. Ale w końcu ciąg jest pusty. Jak mogę utworzyć ciąg x białych spacji?

Odpowiedz

7

Problem może być spowodowany tym, że $empty_space zawiera tylko spacje. Następnie, w celu wysyłania im trzeba otoczyć je w cudzysłów:

echo "${empty_space}some_other_thing" 

Można spróbować bardziej interesujący wyjście z printf na przykład w celu uzyskania kilku spacji. Na przykład, aby zapisać 20 spacji:

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

.. a pasek postępu "#" można również zapisać za pomocą 'printf (1)', prawdopodobnie upraszczając obie procedury. – sarnold

+0

Dzięki za odpowiedź. Próbowałem wcześniej "$ {empty_space}", ale to nie działa. Wydarzenie empty_space = 'printf '% 20s' ''' nie działa :(Bash jest dziwne – ciembor

+1

@ciembor: Co masz na myśli, 'empty_space =" $ {empty_space} "' nie działa? spacja do 'empty_space' Jak sprawdzasz wartość później? Przypuszczalnie przez wydrukowanie go na ekranie? Czy to cytujesz? To znaczy, musisz zrobić" echo "[$ {progress_bar} $ {empty_space}]" ' , a nie 'echo [$ {progress_bar} $ {empty_space}]'. – Cascabel

1

Ciągi można tworzyć przy użyciu podstawiania parametrów. Podstawienie $ {str: offset: długość} zwraca fragmentu 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

Rozumiem twój problem jak miałem dokładnie takie same.

Moje rozwiązanie było złączyć charakter tymczasowy zamiast spacji, powiedzmy na przykład , a następnie, na koniec, należy wymienić wszystkie ich wystąpień z sed przez spacji:

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

Mam nadzieję, że będzie pomóc Ci !

Powiązane problemy