এটির মূল্যের জন্য, আমি এটি প্রায়শই করা দরকার এবং ব্যবহারের সঠিক উপায়টি কখনই মনে করতে পারি না while IFS= read...
, তাই আমি আমার বাশ প্রোফাইলে নিম্নলিখিত ফাংশনটি সংজ্ঞায়িত করেছি:
# iterate the line of a file and call input function
iterlines() {
(( $# < 2 )) && { echo "Usage: iterlines <File> <Callback>"; return; }
local File=$1
local Func=$2
n=$(cat "$File" | wc -l)
for (( i=1; i<=n; i++ )); do
"$Func" "$(sed "${i}q;d" "$File")"
done
}
এই ফাংশনটি প্রথমে ফাইলটিতে রেখার সংখ্যা নির্ধারণ করে, তারপরে sed
লাইনের পরে লাইন বের করতে ব্যবহার করে এবং প্রতিটি লাইনকে কোনও স্ট্রিং আর্গুমেন্ট হিসাবে কোনও প্রদত্ত ফাংশনে পাস করে। আমি মনে করি এটি বড় ফাইলগুলির সাথে সত্যই অকার্যকর হয়ে উঠতে পারে তবে এখন পর্যন্ত আমার পক্ষে এটি কোনও সমস্যা হয়ে ওঠেনি (অবশ্যই এই স্বাগতটির উন্নতি করার জন্য পরামর্শ)।
ব্যবহারটি বেশ মিষ্টি আইএমও:
>> cat example.txt # note the use of spaces, whitespace, etc.
a/path
This is a sentence.
"wi\th quotes"
$End
>> iterlines example.txt echo # preserves quotes, $ and whitespace
a/path
This is a sentence.
"wi\th quotes"
$End
>> x() { echo "$#"; }; iterlines example.txt x # line always passed as single input string
1
1
1
1
1
<
পুরো লুপটিতে প্রবেশ করতে পারে । এটা তোলে যদিও পুরোপুরি অর্থে এখন আমি দেখে