বাশ স্ট্রিংকে ন্যায়সঙ্গত করতে ট্রেলিং স্পেস যুক্ত করে


20

আমার বর্তমান কোডটি এর মতো দেখাচ্ছে: x=${y:0:40}যা স্ট্রিংয়ের দৈর্ঘ্য 40 টি অক্ষরে সীমাবদ্ধ করে। স্ট্রিং 40 টির চেয়ে কম অক্ষরের আকারের ক্ষেত্রে, স্থানের স্থানের সাহায্যে পেছনের স্থানগুলি পূরণ করা কি সম্ভব?

তাই যদি আমার y="very short text"

আমি আমার y হতে চাই:

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
আমি বরং এই পদ্ধতিটি ব্যবহার করব, কারণ এটি সরাসরি ভেরিয়েবলগুলিতে কাজ করবে এবং আউটপুট দেওয়ার প্রয়োজন হবে না।
ডেভিড তাবারনারো এম।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.