`প্রতিধ্বনি $ ((0x63)) Unders বোঝা`


18

আমি কমান্ড লাইনের মাধ্যমে হেক্সাডেসিমাল রূপান্তর করার উপায় অনুসন্ধান করছিলাম এবং খুঁজে পেলাম খুব সহজ একটি পদ্ধতি আছে echo $((0x63))

এটি দুর্দান্ত কাজ করছে তবে এখানে কী হচ্ছে তা নিয়ে আমি কিছুটা বিভ্রান্ত।

আমি জানি $(...)সাধারণত একটি সাব-শেল, যেখানে বিষয়বস্তুগুলি বাইরের কমান্ডের আগে মূল্যায়ন করা হয়।

এটি এখনও এই পরিস্থিতিতে একটি উপ-শেল? আমি ভাবছি না যে এর অর্থ হবে সাব-শেলটি কেবল মূল্যায়ন করছে (0x63)যা কোন আদেশ নয়।

কেউ কি আমার জন্য আদেশটি ভেঙে দিতে পারে?

উত্তর:


27

$(...)একটি কমান্ড প্রতিস্থাপন (কেবল একটি সাবশেল নয়), তবে $((...))এটি একটি গাণিতিক সম্প্রসারণ।

আপনি যখন ব্যবহার করবেন $((...)), তখন এটি ...পাটিগণিতের এক্সপ্রেশন হিসাবে ব্যাখ্যা করা হবে। এর অর্থ, অন্যান্য বিষয়গুলির মধ্যে, একটি হেক্সাডেসিমাল স্ট্রিংটিকে একটি সংখ্যা হিসাবে ব্যাখ্যা করা হবে এবং দশমিক রূপান্তরিত হবে। সম্পূর্ণ অভিব্যক্তিটি তখন সংখ্যার মান দ্বারা প্রতিস্থাপিত হবে যা অভিব্যক্তিটি মূল্যায়ন করে।

প্যারামিটার সম্প্রসারণ এবং কমান্ড প্রতিস্থাপনের মতো $((...))শেলের শব্দের বিভাজন এবং ফাইলের নাম গ্লোবিং দ্বারা প্রভাবিত না হওয়ার বিষয়ে উদ্ধৃত করা উচিত।

echo "$(( 0x63 ))"

পার্শ্ব দ্রষ্টব্য হিসাবে, একটি গাণিতিক এক্সপ্রেশনতে পরিবর্তনশীলগুলি এর প্রয়োজন হয় না $:

$ x=030; y=30; z=0x30
$ echo "$(( x + y +x ))"
78

2
আরও মনে রাখবেন যে $((...))কমান্ড প্রতিস্থাপনের সাথে দ্বন্দ্বের কারণে , তার echo "$( (echo x; echo y) | tr xy yx)"পরিবর্তে লিখতে হবে echo "$((echo x; echo y) | tr xy yx)"(যদিও কিছু শেল এখনও পরবর্তীকৃত, ওয়াইএমএমভি গ্রহণ করবে)।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস এবং আপনি কীভাবে $(( ))উত্পাদন আউটপুট তৈরি করবেন যা শব্দ বিভাজন বা গ্লোবাইং দ্বারা প্রভাবিত?
হউক লেজিং


3

এটি সাবসেল নয়, পাটিগণিত মূল্যায়ন। থেকে man bash:

((অভিব্যক্তি))

অভিব্যক্তি অধীনে নীচে বর্ণিত নিয়ম অনুযায়ী মূল্যায়ন করা হয় গাণিতিক মূল্যায়ন । যদি অভিব্যক্তির মান শূন্য-না হয়, ফেরতের স্থিতি 0 হয়; অন্যথায় রিটার্নের স্থিতি ১। এটি "এক্সপ্রেশন" হিসাবে ঠিক সমান।


9
((...))বেশ হিসাবে একই না $((...))। উভয়ই পাটিগণিত মূল্যায়ন করে তবে পরেরটি ফলাফল হিসাবে মানটিকে স্ট্রিং হিসাবে প্রতিস্থাপন করে।
কুসালানন্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.