शुद्ध बैश, कोई बाहरी उपयोगिताओं नहीं
यह प्रदर्शन पूर्ण औचित्य करता है, लेकिन अगर आप दांतेदार-सही लाइनों चाहते हैं तो आप दूसरी स्ट्रिंग की लंबाई घटा सकते हैं।
pad=$(printf '%0.1s' "-"{1..60})
padlength=40
string2='bbbbbbb'
for string1 in a aa aaaa aaaaaaaa
do
printf '%s' "$string1"
printf '%*.*s' 0 $((padlength - ${#string1} - ${#string2} )) "$pad"
printf '%s\n' "$string2"
string2=${string2:1}
done
दुर्भाग्य से, उस तकनीक में, पैड स्ट्रिंग की लंबाई को सबसे लंबे समय तक चलने के लिए हार्डकोड किया जाना चाहिए, जो आपको लगता है कि आपको आवश्यकता होगी, लेकिन पैडलग्राफी को एक चर दिखाया जा सकता है। हालाँकि, आप पैड की लंबाई के लिए एक चर का उपयोग करने में सक्षम होने के लिए इन तीनों के साथ पहली पंक्ति को बदल सकते हैं:
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
तो पैड ( padlimit
और padlength
) टर्मिनल चौड़ाई ( $COLUMNS
) पर आधारित हो सकता है या सबसे लंबे डेटा स्ट्रिंग की लंबाई से गणना की जा सकती है ।
आउटपुट:
a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb
दूसरी स्ट्रिंग की लंबाई घटाए बिना:
a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb
पहली पंक्ति इसके विपरीत हो सकती है (समान sprintf
):
printf -v pad '%0.1s' "-"{1..60}
या इसी तरह अधिक गतिशील तकनीक के लिए:
printf -v pad '%*s' "$padlimit"
यदि आप चाहें तो मुद्रण को एक पंक्ति में कर सकते हैं:
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"