খাঁটি বাশ, কোনও বাহ্যিক সুবিধা নেই
এই প্রদর্শনটি সম্পূর্ণ ন্যায়সঙ্গততা করে, তবে আপনি যদি রাগড-ডান লাইনগুলি চান তবে আপনি কেবল দ্বিতীয় স্ট্রিংয়ের দৈর্ঘ্য বাদ দিয়ে বাদ দিতে পারেন।
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"