কী: $ m পরম: = মান} মানে?


34

আমি জেড শেল সম্পর্কিত একটি ব্যবহারকারীর গাইডে নিম্নলিখিতটি পড়েছি :

'সত্য' এর প্রতিশব্দ হ'ল ':'; এটি প্রায়শই এই ফর্মটিতে যুক্তি দেওয়ার জন্য ব্যবহৃত হয় যার পার্শ্ব প্রতিক্রিয়া রয়েছে তবে যা ব্যবহার করা উচিত নয় - এরকম কিছু

: ${param:=value}

যা সমস্ত বোর্ন শেল ডেরিভেটিভসে একটি সাধারণ প্রতিমা। প্যারামিটার সম্প্রসারণে, $paramমান মান দেওয়া হয় যদি এটি আগে খালি ছিল, এবং অন্যথায় একা ছেড়ে গেছে। যেহেতু প্যারামিটার বিস্তারের একমাত্র কারণ ছিল, আপনি :যুক্তি উপেক্ষা করতে ব্যবহার করেন use প্রকৃতপক্ষে, শেলটি নির্দ্বিধায় কমান্ড লাইন তৈরি করে - কর্নেল, তারপরে $paramঅ্যাসাইনমেন্টটি ঘটেছে কি না - তারপরে কমান্ডটি কার্যকর করে; এটি ঠিক তাই ঘটে যে ':' এটি যে আর্গুমেন্ট দিয়েছিল তা কোনও নোটিশ নেয় না।

কিন্তু আমি এটা বুঝতে পারি না। আমি এর :অর্থটি পেয়েছি trueতবে অভিব্যক্তিতে দুটি কলোন রয়েছে। একটি ছোটখাটো প্রশ্ন হিসাবে, কেন এই আইডিয়োমটি সমস্ত বোর্ন শেল ডেরাইভেটিভগুলিতে এত বেশি ব্যবহৃত হয়? এটা কি উদ্দেশ্য পরিবেশন করে?

দ্রষ্টব্য: এই প্রতিমাটি বাশ এবং zsh উভয় ক্ষেত্রেই আমি আগ্রহী ।

ধন্যবাদ


আপনি জিজ্ঞাসা করছেন zshবা bash?
enzotib

@ এঞ্জোটিব, আমি দুজনের মধ্যেই আগ্রহী। আমি তা স্পষ্ট করে দিয়েছি।
অ্যামিলিও ওয়াজকেজ-রেইনা

উত্তর:


31

এর টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো

এই কোডটি :কিছু যুক্তি দিয়ে কমান্ড চালায় । কমান্ড :কিছুই করে না এবং তার যুক্তি উপেক্ষা করে। সুতরাং পুরো কমান্ড লাইনটি কিছুই করে না, যুক্তিগুলির মধ্যে যে কোনও পার্শ্ব প্রতিক্রিয়া ঘটে except

বাক্য ${parameter_name:=value}গঠনটি ছাই, বাশ, কেএসএস এবং জেডএস সহ সমস্ত অ-অ্যান্টিক বোর্ন-স্টাইলের শেলগুলিতে বিদ্যমান। এটি প্রয়োজনীয় হলে প্যারামিটারটিকে ডিফল্ট হিসাবে সেট করে। এটা সমান

if [ -z "$parameter_name" ]; then parameter_name=value; fi
 ${parameter_name}

অন্য কথায়, যদি parameter_nameসেট না করা হয় বা খালি মান হিসাবে সেট করা থাকে, তবে এটি নির্দেশিত মানটিতে সেট করুন; এবং তারপরে নতুন প্যারামিটার মানটি ব্যবহার করে কমান্ডটি চালান। একটি বৈকল্পিক রয়েছে, ${parameter_name=value}যা প্যারামিটারটি খালি থাকলে খালি ছেড়ে দেয়, কেবলমাত্র পরামিতিটি আনসেট না থাকলে নির্দেশিত মানটি ব্যবহার করে।

আপনি এই সিনট্যাক্স "প্যারামিটারটি সম্প্রসারণ" এ অধীনে নথিভুক্ত পাবেন POSIX বৈশিষ্ট , এবং ড্যাশ, ব্যাশ, ksh এবং zsh ম্যানুয়াল।

এই সিনট্যাক্সের বিভিন্নতা রয়েছে, বিশেষত ${parameter_name:-value}যা আপনাকে কেবলমাত্র প্যারামিটারকে বরাদ্দ না করে এই প্রসারণের জন্য একটি ডিফল্ট মান ব্যবহার করতে দেয়।

সংক্ষেপে, : ${parameter_name:=value}লেখার একটি সংক্ষিপ্ত উপায়

if [ -z "$parameter_name" ]; then parameter_name=value; fi

11

:সত্যের অর্থ নয় - আপনি সম্ভবত ভাবছেন while :, তবে এমনকি এই অভিব্যক্তিতে এর অর্থ "সত্য" নয়, এটি কেবল এটির মূল্যায়নের ক্ষেত্রে ঘটে (বাস্তবে এটি কেবল নাল আদেশ বা নূপুর)।

এই পরামিতির সম্প্রসারণ ( ${x:=y}) অর্থ "বরাদ্দ Y থেকে এক্স যদি এক্স সেট করা থাকে না বা খালি, এবং প্রসারিত Y "।

$ echo "${foo:=bar}"
bar
$ foo=baz
$ echo "${foo:=bar}"
baz
$ foo=
$ echo "${foo:=bar}"
bar
$ echo "${foo}"
bar

বাশ হ্যাকারস উইকির এখানে প্যারামিটার সম্প্রসারণ সম্পর্কে একটি ভাল নিবন্ধ রয়েছে ।

যে কারণটি :ব্যবহৃত হয় তা হ'ল কমান্ডের অন্যান্য অংশগুলি মূল্যায়ন করা হলেও সেগুলি কার্যকর করা হয় না (যেমন :নাল আদেশ) is সুতরাং, আপনি ${x:=y}অন্য কোনও কিছু প্রভাবিত না করে এর ফাংশনটি সম্পাদন করেছেন, উদাহরণস্বরূপ, যদি আপনার :শুরুতে না থাকে তবে এটি y নামক আদেশটি কার্যকর করার চেষ্টা করবে ।

এখানে bashএর সহায়তা পৃষ্ঠাটি রয়েছে ::

:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

3

প্রথমটি :একটি কমান্ড, একে "নুপ" বা "অপারেশন না" বলা হয়। ম্যানপেজে যেমন বলা হয়েছে, এটি প্রায়শই যুক্তিগুলির মূল্যায়ন করতে ব্যবহৃত হয়।

দ্বিতীয়টি :ভেরিয়েবল প্রসারণের যোগ্যতা অর্জনকারী - প্রযুক্তিগতভাবে এটি :=। যা বলা হয়েছে, এটির মান নির্ধারণ করে যদি এটির কোনও মান না থাকে।

বুদ্ধিমান অনুসারে, আপনার যদি পরিবেশের পরিবর্তনশীলের একটি ডিফল্ট মান প্রয়োজন হয় তবে আপনি এই বাক্য গঠনটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, কোনও প্রোগ্রাম চালানোর সময় cron(8), পরিবেশটি সেট করা থাকে না এবং শেলের ডট ফাইলগুলি চালানো হয় না। সুতরাং আপনার কিছু ডিফল্ট সেট করার প্রয়োজন হতে পারে।

: ${JAVA_HOME:=/usr/local/jdk-1.6.0_28}

তারপরে আপনি 'সেট করে এটি ভুলে যেতে পারেন' (ডিফল্ট জেভিএম পরিবর্তিত হওয়া অবধি)।

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