printf
আউটপুট ফর্ম্যাট করতে ব্যবহার করুন (এটি এর চেয়ে আরও বেশি বহনযোগ্যecho
)। আমি রঙ ফেলা সিকোয়েন্সগুলির আসল মানটি এমন আকারে সংরক্ষণের পরিবর্তে সঞ্চয় করতে চাই যার দ্বারা প্রসারিত হওয়া দরকার echo
।
RED=$(tput setaf 1) GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3)
NC=$(tput sgr0)
online="${GREEN}online$NC" offline="${RED}offline$NC"
ping -c 1 "$hostname" > /dev/null 2>&1 && state=$online || state=$offline
printf 'Network %-15s: %s\n' "$hostname" "$state"
%-15s
একটি বিন্যাসে স্পেসিফিকেশন প্যাড দৈর্ঘ্য ডানে তাই ব্যবধান সহ স্ট্রিং (অক্ষরের সংখ্যা যে হয় zsh
এবং fish
এবং অন্যান্য অধিকাংশ শাঁস / printf, বাইট ) অন্তত 15 যাবে।
$ printf '|%-4s|\n' a ab abc abcd abcde
|a |
|ab |
|abc |
|abcd|
|abcde|
printf '|%4s|\n' a ab abc abcd abcde
| a|
| ab|
| abc|
|abcd|
|abcde|
ছাঁটাই সহ:
$ printf '|%.4s|\n' a ab abc abcd abcde
|a|
|ab|
|abc|
|abcd|
|abcd|
$ printf '|%4.4s|\n' a ab abc abcd abcde
| a|
| ab|
| abc|
|abcd|
|abcd|
$ printf '|%-4.4s|\n' a ab abc abcd abcde
|a |
|ab |
|abc |
|abcd|
|abcd|
কলামগুলিতে পাঠ্য বিন্যাস করতে অন্যান্য ইউটিলিটিগুলির মধ্যে পসআইএক্সexpand
অন্তর্ভুক্ত রয়েছে :
printf 'Network %s\t: %s\n' "$hostname" "$state" | expand -t 30
(এখানে ট্যাব অক্ষরটি প্রসারিত করে \t
) ট্যাবটি প্রতি 30 টি কলাম থামিয়ে দেয়)
বা বিএসডিcolumn
বা পসিক্সpr
:
printf 'Network %s\n: %s\n' "$hostname" "$state" | pr -at2
(এখানে 2 36-কলামের প্রশস্ত কলামগুলিতে আউটপুট আউট হচ্ছে ( -w
72 এর ডিফল্ট থেকে পৃষ্ঠার প্রস্থ পরিবর্তন করার বিকল্প দেখুন ))।
বা বিএসডিrs
:
{
while...
printf 'Network %s\n: %s\n' "$hostname" "$state"
done
} | rs -e 0 2
(যেমনটি column
সমস্ত ইনপুট না পড়া পর্যন্ত আউটপুট করা শুরু করবে না)।
বা জিএনইউcolumns
:
printf 'Network %s\n: %s\n' "$hostname" "$state" | columns -w 25 -c 2
zsh
: এছাড়াও স্ট্রিং প্যাডিং জন্য কিছু প্যারামিটার সম্প্রসারণ পতাকা হয়েছে ${(l:15:)hostname}
জন্য বাম প্যাডিং এবং ${(r:15:)hostname}
জন্য ডান প্যাডিং থাকবে না (ছাঁটাই সহ)। ইন প্রম্পট সম্প্রসারণ (অনুরোধ জানানো অথবা মত print -P
অথবা সঙ্গে প্যারামিটার প্রসারণও সক্রিয় %
পতাকা), এটি সমর্থন %F{green}
রঙ আউটপুট, তাই আপনি করতে পারেন:
online='%F{green}online%f'
printf '%s\n' "Network ${(r:15:)hostname}: ${(%)online}"
বা:
print -rP "Network ${(r:15:)hostname}: $online"
যদিও এর লিখিত সামগ্রী $hostname
তত্ক্ষণাত প্রসারণের সাপেক্ষে হতে পারে, যা আপনার কন্টেন্টের $hostname
নিয়ন্ত্রণে না থাকলে কমান্ড ইঞ্জেকশন দুর্বলতা তৈরি করে (এর মতো hostname='%<a[`reboot`]<'
)