কমান্ড লাইন টার্মিনালে গুণ


115

আমি আমাদের ল্যাব পরীক্ষায় ইনপুট সরবরাহ করতে একটি সিরিয়াল টার্মিনাল ব্যবহার করছি। আমি এটি ব্যবহার করে দেখতে পেলাম

$ echo "5X5"

শুধু একটি স্ট্রিং ফেরত "5X5"। গুণের ক্রিয়াকলাপ চালানোর জন্য কোন আদেশ আছে?

উত্তর:


208

হ্যাঁ, কিছু সাধারণ গণিত করার জন্য আপনি বাশের অন্তর্নির্মিত গাণিতিক সম্প্রসারণটি$(( )) ব্যবহার করতে পারেন

$ echo "$((5 * 5))"
25

পরীক্ষা করে দেখুন ব্যাশ রেফারেন্স ম্যানুয়াল মধ্যে শেল পাটিগণিত অধ্যায় অপারেটার একটি সম্পূর্ণ তালিকা জন্য।

সম্পূর্ণরূপে স্বার্থে, যেমন অন্যান্য নির্দেশিত, আপনার যদি স্বেচ্ছাচারিত নির্ভুলতার প্রয়োজন হয়, bcবা dcআরও ভাল হবে।


45

আরও উন্নত এবং সুনির্দিষ্ট গণিতের জন্য বিসি (1) ব্যবহার বিবেচনা করুন।

echo "3 * 2.19" | bc -l 
6.57

19

অভ্যন্তরীণ পদ্ধতি

এর সাথে পাটিগণিতের সম্প্রসারণকে সমর্থন করে $(( expression ))। উদাহরণ স্বরূপ:

$ echo $(( 5 * 5 ))
25

বাহ্যিক পদ্ধতি

বেশ কয়েকটি ইউটিলিটিস বিসি এবং এক্সপ্রেস সহ পাটিগণিত সরবরাহ করে

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25

15

শাস্ত্রীয় সমাধানটি হ'ল:

 expr 5 \* 5

আর একটি দুর্দান্ত বিকল্প হ'ল:

 echo 5 5\*p | dc

এই উভয় সমাধান কেবলমাত্র পূর্ণসংখ্যার ক্রিয়াকলাপগুলির সাথে কাজ করবে।


1
dcভাসমান সঙ্গে কাজ করে। ব্যবহার করে দেখুন echo '4 k 50 7 / p' | dc। আউটপুট হয় 7.1428kকমান্ড স্পষ্টতা সেট করে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@Dennis ডিসি দুটি ভিন্ন বাস্তবায়নের, আমি মাধ্যমে দর্শাইয়া ভাসা অপারেশন কাজ দেখছি k। আমি অবশ্যই ডিফল্ট নির্ভুলতা 0 (পূর্ণসংখ্যার কাটা) মনে করছি। আমি কি ভুল স্মরণ করছি, বা কেবল নতুন বাস্তবায়নগুলি আচরণের পরিবর্তন হয়েছে?
উইলিয়াম পার্সেল

আমি dcবেশি বীজগণিত এবং কম আরপিএন কম হওয়ায় কয়েক বছর ধরে আমি খুব কমই ব্যবহার করেছি তাই আমার মনে নেই। একটি জিএনইউ সিস্টেমে আমি ব্যবহার করছি, ডিফল্টটি 0 হয় An একটি পুরানো (1993) ফ্রিবিএসডি manপৃষ্ঠায় ডিফল্টটিকে শূন্য বলে উল্লেখ করা হয়, তবে পুরানো বিএসডি manপৃষ্ঠাগুলি তা দেয় না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

উপায় দ্বারা (ভবিষ্যতের পাঠকদের জন্য), আমার উদাহরণটি সঠিকভাবে দাবিটিকে সঠিকভাবে মোকাবেলা করার জন্য একটি অ-পূর্ণসংখ্যার ফলাফলের পরিবর্তে অ-পূর্ণসংখ্যার অপারেন্সগুলি দেখানো উচিত ছিল । কখনও ভয় করবেন না, echo '4 k 50.5 7 / p' | dcকাজ করে (আউটপুট 7.2142:)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

8

একটি সাধারণ শেল ফাংশন (কোনও সেডের দরকার নেই) '5X5' ব্যাখ্যা করার কৌশলটি করা উচিত

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

6

আমি এই ফাংশনটি ব্যবহার করি যা bcভাসমান পয়েন্ট গণনাগুলি ব্যবহার করে এবং সমর্থন করে:

c () { 
    local a
    (( $# > 0 )) && a="$@" || read -r -p "calc: " a
    bc -l <<< "$a"
}

উদাহরণ:

$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797

বাশের পাটিগণিতের বিস্তৃতি ভাসমান সমর্থন করে না (তবে কর্ন শেল এবং জেডএস ডু)।

উদাহরণ:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75

4

আমি এটির জন্য একটি সাধারণ স্ক্রিপ্ট ব্যবহার করি:

me@mycomputer:~$ cat /usr/local/bin/c

#!/bin/sh

echo "$*" | sed 's/x/\*/g' | bc -l

তবে পরিবর্তনটি xকরার *পর থেকে *শেল একটি বিশেষ চরিত্র। এটি নিম্নলিখিত হিসাবে ব্যবহার করুন:

  • c 5x5
  • c 5-4.2 + 1
  • c '(5 + 5) * 30' (এক্সপ্রেশনটিতে কোনও বন্ধনী থাকলে আপনার এখনও উদ্ধৃতি ব্যবহার করতে হবে)।

আমি আপনার ধারণাটি গুণনের জন্য একটি "এক্স" ব্যবহার করতে চাই। উদ্ধৃতি না দেওয়ার জন্য আপনি একইভাবে বন্ধনীগুলির পরিবর্তে বর্গাকার বন্ধনী ব্যবহার করতে পারেন। trএকাধিক অক্ষরের জন্য অক্ষর ম্যাপিং করতে ব্যবহার করা যেতে পারে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

3

আপনি যদি অজগর পছন্দ করেন এবং প্যাকেজ ইনস্টল করার কোনও বিকল্প রাখেন তবে আমি যে ইউটিলিটি তৈরি করেছি তা আপনি ব্যবহার করতে পারেন ।

# install pythonp
python -m pip install pythonp

pythonp "5*5"
25

pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454

# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"     
3628800
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.