2011-10-07 27 views
6

Vấn đề rất đơn giản.Kết nối khoảng trống trong 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 

Tôi cần empty_space để định vị nội dung sau thanh tiến trình. Tôi đã mong đợi rằng nó sẽ là chuỗi x khoảng trắng. Nhưng cuối cùng chuỗi là trống rỗng. Làm cách nào để tạo chuỗi x khoảng trắng?

Trả lời

7

Sự cố có thể do $empty_space chỉ có dấu cách. Sau đó, để xuất chúng, bạn phải bao quanh nó trong dấu ngoặc kép:

echo "${empty_space}some_other_thing" 

Bạn có thể thử đầu ra thú vị hơn với printf ví dụ để có được nhiều khoảng trắng. Ví dụ: để viết 20 dấu cách:

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

.. và thanh tiến trình '#' có thể _also_ được viết bằng 'printf (1)', có thể đơn giản hóa cả hai thường trình. – sarnold

+0

Cảm ơn bạn đã trả lời. Tôi đã thử "$ {empty_space}" trước đây, nhưng nó không hoạt động. Sự kiện empty_space = 'printf '% 20s' ''' không hoạt động: (Bash là lạ. – ciembor

+1

@ciembor: Ý của bạn là gì, 'empty_space =" $ {empty_space} "' không hoạt động? không gian trống cho 'empty_space'. Làm thế nào để bạn kiểm tra giá trị sau? Có lẽ bằng cách in nó vào màn hình của bạn? Bạn có trích dẫn nó không? Đó là, bạn cần phải thực hiện' echo '[$ {progress_bar} $ {empty_space}] "' , không phải 'echo [$ {progress_bar} $ {empty_space}]'. – Cascabel

1

Có thể tạo chuỗi bằng cách sử dụng thay thế tham số. Việc thay thế $ {str: offset: length} trả về một chuỗi con của 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

Tôi hiểu vấn đề của bạn giống như tôi đã hoàn toàn giống nhau.

giải pháp của tôi là để nối một nhân vật tạm thời thay vì một khoảng trắng, nói ví dụ , và sau đó, cuối cùng, thay thế tất cả lần xuất hiện của họ với sed bởi một khoảng trắng:

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

Tôi hy vọng nó sẽ giúp bạn !

Các vấn đề liên quan