बैश स्ट्रिंग को सही करने के लिए अनुगामी रिक्त स्थान जोड़ते हैं


20

मेरा वर्तमान कोड इस तरह दिखता है: x=${y:0:40}जो स्ट्रिंग की लंबाई को 40 वर्णों तक सीमित करता है। स्ट्रिंग के मामले में 40 अक्षरों से कम होने के कारण, क्या अनुगामी स्थानों को रिक्त स्थान से भरना संभव है?

इसलिए अगर मेरी y="very short text"

मैं चाहूंगा कि मेरी वाई हो:

y = "बहुत छोटा पाठ (+25 अनुगामी स्थान) "

जवाबों:


20

यदि वे वर्ण एकल-बाइट हैं, तो यदि आप किसी ऐसे लोकेल में हैं, जहाँ चार्ट सिंगल-बाइट है (जैसे iso8859-1) या यदि लोकेल का चार्ट UTF-8 है, लेकिन पाठ केवल ASCII है, तो आप कर सकते हैं :

printf -v y %-40.40s "$y"

यह ट्रंकटिंग और पेडिंग दोनों को कवर करेगा।

यदि नहीं, तो आप हमेशा 40 रिक्त स्थान जोड़ सकते हैं और अपने ${y:0:40}दृष्टिकोण का उपयोग कर सकते हैं।

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh बाएं और दाएं पैडिंग के लिए समर्पित ऑपरेटर हैं:

y=${(r:40:)y}

(ट्रंकेशन भी करता है)। zshके printfबाइट्स की बजाय अक्षरों में गिना जाता है, इसलिए नहीं होती bashऊपर रों मुद्दा '। हालांकि ध्यान दें कि आपको विकल्प के zshलिए 5.3 या नए की आवश्यकता है -v

अधिक विवरण के लिए संबंधित प्रश्न का यह उत्तर भी देखें यदि आप उन वर्णों से सामना कर रहे हैं जिनमें सभी की चौड़ाई समान नहीं है।


14

आपको प्रयास करना चाहिए printf:

printf '%-40s' "$y"

10

शुद्ध bash:

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

विधि यह है कि इसे छोटा करने के बाद प्रत्येक स्ट्रिंग में 0-40 रिक्त स्थान जोड़ें।

आउटपुट, (एकल उद्धरण स्थिति पर ध्यान दें):

'very short text                         '

1
मैं इस पद्धति का उपयोग करूंगा, क्योंकि यह सीधे चर पर काम करेगा और आउटपुट की आवश्यकता नहीं होगी।
डेविड टैबरेरो एम।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.