বিসি-র ফলাফল কীভাবে একটি ভেরিয়েবলে পাস করতে হয়


15

আমি একটি স্ক্রিপ্ট লিখছি এবং আমি ফলাফলগুলি bcভেরিয়েবলের মধ্যে দিয়ে দিতে চাই । আমি 2 টি ভেরিয়েবল ( var1এবং var2) ঘোষণা করেছি এবং তাদের মান দিয়েছি । আমার স্ক্রিপ্টে আমি ফলাফলগুলি bcঅন্য ভেরিয়েবলের মধ্যে দিয়ে বলতে চাই var3যাতে আমি var3অন্যান্য গণনার সাথে কাজ করতে পারি । এখন পর্যন্ত আমি কোনও ফাইলটিতে ফলাফল লিখতে সক্ষম হয়েছি যা আমি যা খুঁজছি তা নয় এবং আমি টার্মিনালে ফলাফল প্রতিধ্বনি করতে সক্ষম হয়েছি তবে আমি মুহূর্তে ফলাফলটি একটি পরিবর্তনশীলকে পাস করতে চাই যাতে আমি এই পরিবর্তনশীল সঙ্গে কাজ করতে পারেন।

echo "scale=2;$var1/var2" | bc

উত্তর:


23

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি এখানে পাইপের পরিবর্তে এখানে স্ট্রিংটি ব্যবহার করতে চাইলে:

bc <<< "scale=2;$var1/$var2"

এটি আপনাকে একটি সাব-শেল সংরক্ষণ করবে।

তারপরে, কমান্ডের আউটপুট সংরক্ষণ করতে একটি কমান্ড প্রতিস্থাপন ব্যবহার করুন:

answer=$(bc <<< "scale=2;$var1/$var2")

সম্পাদনা করুন।

আপনি যদি এর থেকেও শীতল কিছু চান তবে bcএখানে ডিসি (বিপরীত পোলিশ ক্যালকুলেটর):

answer=$(dc <<< "2k $var1 $var2/p")

1
হ্যাঁ আমি ব্যাশ ব্যবহার করছি, আপনি কি দয়া করে সাব-শেল সম্পর্কে স্পষ্ট করে বলতে পারেন? অসুবিধা আছে কি?
শাওলিন

2
প্রতিবার আপনি যখন পাইপ ব্যবহার করেন তখন পাইপের |ডানদিকে কমান্ডটি একটি সাবশেলে চালিত হয় এবং এটি একটি নতুন সাবশেল খোলার জন্য সংস্থান গ্রহণ করে (এটি আদেশটি কার্যকর করতে বাশের নতুন উদাহরণ খোলার মতো)। এড়াতে পারলে এড়িয়ে চলুন। এখানে, বংশীধ্বনিতুল্য একটি echoথেকে bcকমান্ড চালানো হবে bcএকটি subshell এবং, কিছু অর্থে,, প্রতিবন্ধী (কোন অপরাধ) যেহেতু ব্যাশ বিস্ময়কর এখানে স্ট্রিং কনস্ট্রাক্ট হয়েছে <<<এই মত মূঢ় জিনিষ এড়ানো।
gniourf_gniourf

@gniourf_gniourf আবার, আপনি যদি রিসোর্স ব্যবহার সম্পর্কে যত্নশীল হন তবে আপনি ব্যাশের /bin/shপরিবর্তে (ড্যাশ) ব্যবহার করবেন তবে ড্যাশ নেই <<<
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

সহায়ক তথ্যের জন্য আপনাকে ধন্যবাদ !! সম্পদ সংরক্ষণ এবং সাব-হেলগুলি সংরক্ষণের বিষয়ে জানা ভাল। আমি আপনার ইনপুট প্রশংসা করি।
শাওলিন

1
@Gilles শুধু তুলনা time for i in {1..10000}; do : <<< ""; doneসঙ্গে time for i in {1..10000}; do echo "" | : ; done, আপনি একটি নাটকীয় পার্থক্য দেখতে পাবেন। তারপরে আপনি ঠিক বলেছেন, একজন বংশধর এস্ট্রাস্ট্রিংয়ের চেয়ে কিছুটা দ্রুত। তবে ওয়ান-লাইনার হিসাবে টাইপ করা আরও বিশ্রী।
gniourf_gniourf

9

কমান্ড প্রতিস্থাপন একটি কমান্ডের আউটপুটকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করে।

var3=$(echo "scale=2;$var1/$var2" | bc)

ধন্যবাদ! গবেষণার এক ঘন্টা পরে সম্ভবত, আমি ঠিক যেখানে থাকতে চেয়েছিলাম সেখানে তা পেয়েছে। ধন্যবাদ
শাওলিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.