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


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.