2011-10-07 13 views
6

में व्हाइटस्पेस concatenation समस्या सरल है।बैश

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 

मुझे प्रगति पट्टी के बाद सामग्री की स्थिति के लिए empty_space की आवश्यकता है। मुझे उम्मीद है कि यह एक्स व्हाइटसाइट्स की स्ट्रिंग होगी। लेकिन अंत में स्ट्रिंग खाली है। मैं एक्स व्हाइटसाइट्स की स्ट्रिंग कैसे बना सकता हूं?

उत्तर

7

समस्या हो सकती है क्योंकि $empty_space में केवल रिक्त स्थान हैं। फिर, उत्पादन करने के लिए उन्हें आप दोहरे उद्धरण में यह चारों ओर करने के लिए है:

echo "${empty_space}some_other_thing" 

आप उदाहरण कई रिक्त स्थान प्राप्त करने के लिए के लिए printf साथ और अधिक दिलचस्प उत्पादन कर सकते हैं। उदाहरण के लिए, 20 रिक्त स्थान लिखने के लिए:

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

.. और प्रगति-बार '#' 'printf (1)' के साथ लिखा जा सकता है, शायद दोनों दिनचर्या को सरल बनाना। – sarnold

+0

एक उत्तर के लिए धन्यवाद। मैंने पहले "$ {empty_space}" की कोशिश की, लेकिन यह काम नहीं करता है। इवेंट empty_space = 'printf '% 20s' '' 'काम नहीं करता है :(। बैश अजीब है। – ciembor

+1

@ciembor: आपका क्या मतलब है,' blank_space =" $ {blank_space} "' काम नहीं करता है? यह एक संलग्न करता है स्पेस 'स्पेस_ स्पेस'। आप बाद में मूल्य की जांच कैसे कर रहे हैं? संभवतः इसे अपनी स्क्रीन पर प्रिंट करके? क्या आप इसे उद्धृत कर रहे हैं? यानी, आपको 'echo "[$ {progress_bar} $ {blank_space}]" , 'echo [$ {progress_bar} $ {blank_space}] ' – Cascabel

1

तार पैरामीटर प्रतिस्थापन का उपयोग कर बनाया जा सकता है। प्रतिस्थापन $ {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

मैं अपनी समस्या को समझने के रूप में मैं बिल्कुल वैसा ही था str की सबस्ट्रिंग देता है।

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

मुझे आशा है कि यह होगा:

मेरे समाधान एक खाली स्थान के के बजाय एक अस्थायी चरित्र को श्रेणीबद्ध, उदाहरण के के लिए कहते हैं, और फिर, अंत में, अपने सभी आवृत्तियां sed के साथ एक खाली स्थान के द्वारा प्रतिस्थापित करने के लिए था आपकी मदद !