আমি কীভাবে bashশেলটিতে অ্যারে হিসাবে ব্যবহারকারী ইনপুট পড়তে পারি ?
./array_test.sh < war_and_peace.txt।
আমি কীভাবে bashশেলটিতে অ্যারে হিসাবে ব্যবহারকারী ইনপুট পড়তে পারি ?
./array_test.sh < war_and_peace.txt।
উত্তর:
এটি করার একটি উপায় এখানে:
while read line
do
my_array=("${my_array[@]}" $line)
done
echo ${my_array[@]}
আপনি যদি কেবল এটি চালান, আপনি সিটিআরএল + ডি (ইওএফ) না চাপানো পর্যন্ত এটি স্ট্যান্ডার্ড-ইনপুট থেকে পড়া চালিয়ে যাবে। পরবর্তীতে লাইন আপনার লেখা থাকবে my_array। কিছু এই কোড বিভ্রান্তিকর হতে পারে। লুপটির শরীরটি মূলত বলে my_array = my_array + element।
ডকুমেন্টেশন কিছু আকর্ষণীয় টুকরা:
উন্নত ব্যাশ-স্ক্রিপ্টিং গাইড একটি দুর্দান্ত হয়েছে অ্যারে ওপর অধ্যায়টি
এর র manpage পঠিত builtin
Thegeekstuff.com থেকে 15 টি অ্যারের উদাহরণ
read -rকখনও কখনও বেশ দরকারী / গুরুত্বপূর্ণ ... স্টেফানোর লিঙ্ক "রিড বিল্টিন ম্যানপেজে" এর উদ্দেশ্যটি ব্যাখ্যা করে ... (ব্যাকস্ল্যাশ ব্যাখ্যা রোধ করতে)।
এবং একটি যা প্রতিবার অ্যারেটি পুনরায় তৈরি করে না (যদিও বাশ 3.1 বা আরও বেশি প্রয়োজন):
array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
[[ $line ]] || break # break if line is empty
array+=("$line")
done
printf '%s\n' "Items read:"
printf ' «%s»\n' "${array[@]}"
আরও জানতে http://mywiki.wooledge.org/BashFAQ/001 দেখুন।
এবং সর্বদা হিসাবে, বাগ লেখা এড়াতে http://mywiki.wooledge.org/BashGuide পড়ুন এবং tldp- গাইডগুলি অ্যাডভান্সড ব্যাশ স্ক্রিপ্টিং গাইডের মতো এড়ান।
IFSসমস্যাটি দেখানোর জন্য ধন্যবাদ । এটিকে শূন্য না করে, সমস্ত পঠিত এবং পিছনের শ্বেত স্পেসে 'পড়ুন' স্ক্রিপ্টগুলি ... এবং অবশ্যই -rখুব ...
এই ওয়ান-লাইনার সম্পর্কে কীভাবে;)
arr=( $(cat -) )
echo ${arr[@]}
সম্পাদনা:
ইন bash,
arr=(val1 val2 ...)
একটি অ্যারে বরাদ্দ করার উপায় । কমান্ড প্রতিস্থাপনের সাথে এটি ব্যবহার করে, আপনি পাইপলাইন থেকে অ্যারেগুলিতে পড়তে পারেন যা এটি readসরাসরি-অগ্রসর পদ্ধতিতে সম্পন্ন করার জন্য ব্যবহার করা সম্ভব নয় :
echo -e "a\nb" | read -a arr
echo ${arr[@]}
আপনি দেখতে পাবেন যে এটি কোনও পাইপ যখন কোনও পাইপ নেই সেহেতু readকিছুই করে না কারণ আউটপুটটি stdinসাবচেলে চালিত হতে পারে যাতে ভেরিয়েবলটি ব্যবহারযোগ্য না হয়।
এই উত্তর দ্বারা প্রস্তাবিত উপায় ব্যবহার করে:
arr=(`echo -e "a\nb"`)
echo ${arr[@]}
এটি দেয় a bযা কোনও পাইপ থেকে শেল ভেরিয়েবলে এবং পাইপের পরে পড়া বাশে মানগুলি নির্ধারণ না করে পড়ার মানগুলির উত্তরগুলির দ্বারা প্রদত্ত যে কোনও ওয়ার্কআরআন্ডের চেয়ে সহজ এবং সোজা-এগিয়ে রয়েছে ।
cat war_and_peace.txt | ./array_test.sh।