সহজ অ্যারে ডাম্পিংয়ের জন্য এক লাইন কৌশল
আমি স্পেস সহ একটি মান যুক্ত করেছি:
foo=()
foo[12]="bar"
foo[42]="foo bar baz"
foo[35]="baz"
আমি, দ্রুত ফেলে ফেলার জন্য সজোরে আঘাতঅ্যারে বা মিশ্রিত অ্যারে আমি ব্যবহার করি
এই ওয়ান লাইন কমান্ড:
paste <(printf "%s\n" "${!foo[@]}") <(printf "%s\n" "${foo[@]}")
রেন্ডার করবে:
12 bar
35 baz
42 foo bar baz
ব্যাখ্যা
printf "%s\n" "${!foo[@]}"
একটি নিউলাইন দ্বারা পৃথক সমস্ত কী মুদ্রণ করবে ,
printf "%s\n" "${foo[@]}"
একটি নিউলাইন দ্বারা পৃথক সমস্ত মান মুদ্রণ করবে ,
paste <(cmd1) <(cmd2)
আউটপুট cmd1
এবং cmd2
লাইন দ্বারা লাইন একত্রিত করবে ।
টিউন করা
এটি -d
সুইচ দ্বারা সুর করা যেতে পারে :
paste -d : <(printf "%s\n" "${!foo[@]}") <(printf "%s\n" "${foo[@]}")
12:bar
35:baz
42:foo bar baz
অথবা এমনকি:
paste -d = <(printf "foo[%s]\n" "${!foo[@]}") <(printf "'%s'\n" "${foo[@]}")
foo[12]='bar'
foo[35]='baz'
foo[42]='foo bar baz'
সহযোগী অ্যারে একই কাজ করবে:
declare -A bar=([foo]=snoopy [bar]=nice [baz]=cool [foo bar]='Hello world!')
paste -d = <(printf "bar[%s]\n" "${!bar[@]}") <(printf '"%s"\n' "${bar[@]}")
bar[foo bar]="Hello world!"
bar[foo]="snoopy"
bar[bar]="nice"
bar[baz]="cool"
নিউলাইনস বা বিশেষ অক্ষরের সাথে ইস্যু করুন
দুর্ভাগ্যক্রমে, এখানে কমপক্ষে একটি শর্ত রয়েছে যা এটি আর কাজ করে না: যখন ভেরিয়েবলটিতে নিউলাইন থাকে:
foo[17]=$'There is one\nnewline'
কমান্ড paste
লাইন বাই লাইন একীভূত করবে, সুতরাং আউটপুট ভুল হয়ে যাবে:
paste -d = <(printf "foo[%s]\n" "${!foo[@]}") <(printf "'%s'\n" "${foo[@]}")
foo[12]='bar'
foo[17]='There is one
foo[35]=newline'
foo[42]='baz'
='foo bar baz'
এই কাজের জন্য, আপনি দ্বিতীয় কমান্ডের %q
পরিবর্তে (এবং কোপিং কোয়েটিং) ব্যবহার করতে পারেন :%s
printf
paste -d = <(printf "foo[%s]\n" "${!foo[@]}") <(printf "%q\n" "${foo[@]}")
নিখুঁত রেন্ডার হবে:
foo[12]=bar
foo[17]=$'There is one\nnewline'
foo[35]=baz
foo[42]=foo\ bar\ baz
থেকে man bash
:
%q causes printf to output the corresponding argument in a
format that can be reused as shell input.
(a b c)
অ্যারেতে রূপান্তর করতে এটি এমনভাবে মুড়িয়ে রাখুন ।