পাটিগণিত সম্পর্কিত কয়েকটি কমান্ড, ড্যাশ, পসিক্স শেল, শ, বৃদ্ধি


17

POSIX শেল-এ কোনও ভেরিয়েবলের প্রাক / পোস্ট বাড়ানোর সময়, এই দুটি উদাহরণের মধ্যে পার্থক্য কী। তাদের দেখে মনে হচ্ছে তাদের একই পরিণতি হবে তবে তারা কি অন্যভাবে ব্যবহার করা হবে? আপনি কখন অন্যের চেয়ে বেশি পছন্দ করবেন?

X=$((X+1))

: $((X=X+1))

উত্তর:


18

আপনার প্রথম উদাহরণে, $((X+1))এক্স +1 এক্সপ্রেশনটি মূল্যায়ন করে ফলাফলটিতে প্রসারিত হয়, যা ভেরিয়েবল হিসাবে স্বাক্ষরিত হয়।

দ্বিতীয় উদাহরণে, একের মাধ্যমে $((X=X+1))ইনক্রিমেন্টগুলি X( $((X++))এছাড়াও বৈধ এবং খাটো, তবে শেল দ্বারা অগত্যা সমর্থিত নয়), এর পরে নতুন মানটিতে প্রসারিত হয়$X , যা নাল কমান্ডের প্রথম যুক্তি :,। নাল কমান্ড তার যুক্তি উপেক্ষা করে এবং ফলাফলটি বাতিল করা হয় (পার্শ্ব প্রতিক্রিয়া সহ)।

আমি ব্যক্তিগতভাবে তিনটি (তুলনামূলক বিষয়গত) কারণে প্রথম ফর্মটি পছন্দ করব:

  • নাল কমান্ডটি অস্পষ্ট এবং ভুল বোঝাবুঝি, যেমনটি এখানে প্রায়শই বিভ্রান্ত প্রশ্নের বিষয় হিসাবে চিহ্নিত হয়।
  • সামগ্রিক শেল ব্যাকরণের দিক থেকে প্রথম রূপটি আরও প্রাকৃতিক বলে মনে হয় এবং এটি পুরানো মূল্যায়ন শৈলীর সামান্য দেখাও দেয়।
  • প্রথম ফর্মটি পরিষ্কার এবং আরও সংক্ষিপ্ত এবং কোনও আদেশ জড়িত না।

আপনি যদি কেবল একটি কমান্ডের মতো পরিবেশ পরিবর্তন করে থাকেন তবে আপনাকে প্রথম সংস্করণটি ব্যবহার করতে হবে

X=$((X+1)) /usr/local/bin/something

আপনাকে সরাসরি আর্গুমেন্টগুলিতে মূল্যায়ন যুক্ত করতে দ্বিতীয় ফর্মটি ব্যবহার করতে হবে:

ls -la "file-$((X++))"   # or ...
ls -la "file-$((X=X+1))" # for better compatibility

এটির পছন্দসই পার্শ্ব প্রতিক্রিয়া রয়েছে, একটি লাইন সংরক্ষণ করে এবং বেশ স্পষ্ট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.