প্রতিধ্বনি $ ((2 # $ 1)) ঠিক কী করে?


53

নিম্নলিখিত বশ স্ক্রিপ্ট বাইনারি নম্বর দেওয়া হলে দশমিক সংখ্যা প্রদর্শন করে।

echo $((2#$1))

ঠিক কেন?

আমি বুঝতে পারি যে $1ইনপুট। সম্ভবত 2বেস (বাইনারি) হয়। তবে আমি ব্যবহৃত সিনট্যাক্স বুঝতে পারি না।

উত্তর:


72

মানুষ বাশ

   echo [-neE] [arg ...]
          Output  the  args,  separated  by spaces, followed by a newline.
          The return status is 0 unless a write error occurs.   If  -n  is
          specified, the trailing newline is suppressed.  If the -e option
          is given,  interpretation  of  the  following  backslash-escaped
          characters  is  enabled.

[...]

   Arithmetic Expansion
       Arithmetic  expansion allows the evaluation of an arithmetic expression
       and the substitution of the result.  The format for  arithmetic  expan‐
       sion is:

              $((expression))

[...]

   Constants with a leading 0 are interpreted as octal numbers.  A leading
   0x or  0X  denotes  hexadecimal.   Otherwise,  numbers  take  the  form
   [base#]n,  where the optional base is a decimal number between 2 and 64
   representing the arithmetic base, and n is a number in that  base.   If
   base#  is omitted, then base 10 is used.  When specifying n, the digits
   greater than 9 are represented by the lowercase letters, the  uppercase
   letters, @, and _, in that order.  If base is less than or equal to 36,
   lowercase and uppercase letters may be used interchangeably  to  repre‐
   sent numbers between 10 and 35.

66
জেরো ব্যাখ্যার জন্য -1।
ম্যাক্স রেড

27
এটি বেশ ভালভাবে ব্যাখ্যা করা হয়েছে বলে আমি মনে করি
NanoPish

19
কোনও প্রশ্নের উত্তর পুরোপুরি দেওয়া, বিদ্যমান ডকুমেন্টেশনগুলিকে সংশোধন করে "কেবল" করা হলেও আমার পক্ষে -১ প্রাপ্য নয়। বিশেষত যদি সেই ডকুমেন্টেশন হ'ল ব্যাশের ম্যানপেজ।
ইয়ংফ্রোগ 10

31
man bash | wc[জিএনইউ বাশ, সংস্করণ 3.2.57] ম্যান পৃষ্ঠাটি 4890 লাইন, 37094 শব্দ , 329778 টি অক্ষর হতে পারে indicates এই উত্তরটি স্ট্রিপ করে যা কেবলমাত্র 7 টি লাইন, 176 শব্দ , 1115 অক্ষর যা প্রাসঙ্গিক। আমি মনে করি যে উত্তরটি আপনার উত্সাহের দাবিদার। (এই মন্তব্য হিসাবে ;-)
ব্রুনো ব্রোনোস্কি

7
@ ম্যাক্সআরয়েড: অপ্রয়োজনীয় ফ্লাফ চেয়ে আপনার মন্তব্যে -1
মেহরদাদ

30

এখানে দস্তাবেজ থেকে: https://tiswww.case.edu/php/chet/bash/bashref.html# শেল- আরিথমেটিক

শীর্ষস্থানীয় 0 সহ ধ্রুবকগুলি অষ্টাল সংখ্যা হিসাবে ব্যাখ্যা করা হয়। একটি শীর্ষস্থানীয় '0x' বা '0 এক্স' হেক্সাডেসিমালকে বোঝায়। অন্যথায়, সংখ্যাগুলি [বেস #] এন রূপ নেয়, যেখানে alচ্ছিক বেসটি পাটিগণিত বেসকে উপস্থাপন করে 2 এবং 64 এর মধ্যে দশমিক সংখ্যা, এবং n সেই বেসের একটি সংখ্যা। যদি বেস # বাদ দেওয়া হয়, তবে বেস 10 ব্যবহার করা হবে। N নির্দিষ্ট করে দেওয়ার সময়, 9 টিরও বেশি সংখ্যার সংখ্যাটি ছোট হাতের অক্ষর, বড় হাতের অক্ষর, '@' এবং '_' দ্বারা অর্ডার করে। যদি বেসটি 36 এর চেয়ে কম বা তার সমান হয় তবে ছোট এবং বড় হাতের অক্ষরগুলি 10 এবং 35 এর মধ্যে সংখ্যার প্রতিনিধিত্ব করতে আন্তরচিকভাবে ব্যবহার করা যেতে পারে।

সুতরাং echo $((16#FF))আউটপুট 255এবং echo $((2#0110))আউটপুট6


25

ইপুরের উত্তরটি দুর্দান্ত তবে খুব সামান্য অসম্পূর্ণ। ব্যাশ ম্যান পৃষ্ঠার উদ্ধৃত অংশ উল্লেখ করে যে বাক্য গঠনটি কেবল ধ্রুবকদের জন্য কাজ করে, এবং একটি ধ্রুবক নয়। আপনি জিজ্ঞাসা করা উচিত কিভাবে এই সত্যিই কাজ করে![base#]n2#$1

সম্প্রসারণ

    কমান্ড লাইনে এটি শব্দগুলিতে বিভক্ত হওয়ার পরে সম্প্রসারণ করা হয়। এখানে সাত ধরণের সম্প্রসারণ করা হয়: ব্রেস এক্সপেনশন, টিলডে এক্সপেনশন, প্যারামিটার এবং ভেরিয়েবল এক্সপেনশন, কমান্ড সাবস্টিটিউশন, পাটিগণিতের সম্প্রসারণ, শব্দ বিভাজন এবং পথের নাম সম্প্রসারণ।

    বিস্তারের ক্রম: ব্রেস সম্প্রসারণ; টিলডে সম্প্রসারণ, প্যারামিটার এবং পরিবর্তনশীল সম্প্রসারণ, পাটিগণিতের সম্প্রসারণ এবং কমান্ড প্রতিস্থাপন (বাম থেকে ডান ফ্যাশনে সম্পন্ন); শব্দ বিভাজন; এবং পথের নাম সম্প্রসারণ।

মূলত বাশ প্রথমে ভেরিয়েবল সাবস্টিটিউশন করছে, যাতে $1এর মানটির সাথে প্রথমে প্রতিস্থাপন করা হয়। তবেই এটি গাণিতিক সম্প্রসারণ করে যা কেবলমাত্র একটি সঠিক ধ্রুবক দেখায়।


এটি অপ্রয়োজনীয় বলে মনে হয়; ওপি বলে, "আমি বুঝতে পারি যে $1এটি ইনপুট" "
স্কট

8
+1 কারণ বিস্তারের ক্রমটি বোঝা অনেকগুলি বিভিন্ন বাশ অভিব্যক্তিটি বোঝার জন্য দরকারী।
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

1
এটি কেবল ইপুরের উত্তরের মন্তব্য হতে পারে।
চ্যানার

1
@ চেপনার দয়া করে সেই ভাল-ফর্ম্যাট ব্লককোটটি একটি মন্তব্যে চেপে দেখার চেষ্টা করুন :-)
আলেকজান্ডার

1
"নোট $1করুন গণিতের এক্সপ্রেশন মূল্যায়নের আগে একটি পরামিতি ধ্রুবক উত্পাদন করতে প্যারামিটারটি প্রসারিত করা হয়েছে। gnu.org/software/bash/manual/bash.txt , বিভাগ 3.5 দেখুন"
চ্যানার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.