সঠিক পরিস্থিতির উপর নির্ভর করে, এটি হয় স্পষ্টভাবে অনির্দিষ্ট (তাই বাস্তবায়নগুলি তারা যেমনটি পারে তেমন করতে পারে) বা আপনার পর্যবেক্ষণ অনুসারে ঘটতে হবে। আপনার সঠিক দৃশ্যেecho ab$
, পসিক্স আউটপুট "আব $" নির্দেশ করে যা আপনি দেখেছেন এবং এটি অনির্দিষ্ট নয় । সমস্ত বিভিন্ন ক্ষেত্রে একটি দ্রুত সংক্ষিপ্ত বিবরণ শেষে।
দুটি উপাদান রয়েছে: প্রথমে শব্দগুলিতে টোকেনাইজিং এবং তারপরে এই শব্দের ব্যাখ্যা।
Tokenisation
পসিক্স টোকেনাইজেশনটির প্রয়োজন যে এটি $
যে কোনও বৈধ পরামিতি প্রসার , কমান্ড প্রতিস্থাপন বা পাটিগণিত প্রতিস্থাপনের শুরু নয় , এটি WORD
টোকেনের আক্ষরিক অংশ হিসাবে বিবেচিত হবে । কারণ 5 নিয়ম ("যদি বর্তমানের চরিত্রটি যদি কোন অনুচ্চারিত হয় $
বা `
শেলটি শুরুর সাথে পরিচয়পত্রের বিস্তৃতি, কমান্ড প্রতিস্থাপন, বা গাণিতিক সম্প্রসারণের জন্য প্রার্থীদের প্রারম্ভিক অব্যক্ত চরিত্রের অনুক্রমগুলি থেকে শুরু করে: $
বা ${
, $(
বা `
, এবং $((
যথাক্রমে" ) প্রযোজ্য নয়, কারণ এই বিস্তারের কোনওটিই সেখানে কার্যকর নয়। প্যারামিটার বিস্তারের জন্য সেখানে উপস্থিত হওয়ার জন্য একটি বৈধ নাম প্রয়োজন, এবং একটি খালি নাম বৈধ নয়।
যেহেতু এই বিধি প্রযোজ্য হয়নি, আমরা যতক্ষণ না এটির সন্ধান না করে আমরা তা অনুসরণ করে চলি। দুটি প্রার্থী হলেন # 8 ("যদি পূর্বের চরিত্রটি একটি শব্দের অংশ ছিল তবে বর্তমান চরিত্রটি সেই শব্দের সাথে সংযুক্ত করা হবে।") এবং # 10 ("বর্তমান অক্ষরটি একটি নতুন শব্দের শুরু হিসাবে ব্যবহৃত হয়েছে।") , এর প্রয়োগ যা echo a$
এবং echo $
যথাক্রমে।
ফর্মের একটি তৃতীয় echo a$+b
কেসও রয়েছে যা একই ক্র্যাকের মধ্য দিয়ে পড়ে, যেহেতু +
কোনও বিশেষ প্যারামিটারের নাম নয়। এটি একটি আমরা পরে ফিরে আসব, যেহেতু এটি নিয়মের বিভিন্ন অংশকে ট্রিগার করে।
স্পেসিফিকেশনের জন্য $
শর্তটি সিনথেটিকভাবে শব্দের একটি অংশ হিসাবে বিবেচনা করা প্রয়োজন এবং এটি পরে আরও প্রক্রিয়া করা যেতে পারে।
শব্দ প্রসার
$
শব্দটি অন্তর্ভুক্ত করে ইনপুটটি এভাবে পার্স হওয়ার পরে , শব্দের বিস্তৃতি প্রতিটি শব্দের সাথে প্রয়োগ করা হয়েছে। প্রতিটি শব্দ পৃথকভাবে প্রক্রিয়া করা হয় ।
এটি নির্দিষ্ট করা হয় :
যদি অব্যক্ত '$' এর পরে এমন কোনও চরিত্র অনুসরণ করা হয় যা নিম্নলিখিতগুলির মধ্যে একটি নয়:
- একটি সাংখ্যিক চরিত্র
- বিশেষ প্যারামিটারগুলির একটির নাম ( বিশেষ প্যারামিটারগুলি দেখুন )
- একটি চলক নামের একটি বৈধ প্রথম অক্ষর
- এ
<left-curly-bracket>
('{')
- একজন
<left-parenthesis>
ফলাফল অনির্ধারিত হয়।
"অনির্দিষ্ট" এখানে একটি নির্দিষ্ট শব্দ যার অর্থ
- একটি উপযুক্ত শেল এই ক্ষেত্রে যে কোনও আচরণ চয়ন করতে পারে
- মেনে চলার অ্যাপ্লিকেশন কোনও নির্দিষ্ট আচরণের উপর নির্ভর করতে পারে না
আপনার উদাহরণে, echo ab$
এটি কোনও চরিত্র $
দ্বারা অনুসরণ করা হয় না , সুতরাং এই নিয়মটি প্রয়োগ হয় না এবং অনির্ধারিত ফলাফলটি চাওয়া হয় না। এর দ্বারা প্ররোচিত কোনও প্র विस्तार নেই $
, সুতরাং এটি আক্ষরিকভাবে উপস্থিত এবং মুদ্রিত out
কোথায় যাবে আবেদন উপরে থেকে আমাদের তৃতীয় ক্ষেত্রে রয়েছে: echo a$+b
। এখানে $
দ্বারা অনুসরণ করা হয় +
, যা একটি সংখ্যা, বিশেষ প্যারামিটার নয় ( @
, *
, #
, ?
, -
, $
, !
, অথবা 0
), একটি ভেরিয়েবলের শুরু নাম (আন্ডারস্কোর বা থেকে একটি বর্ণানুক্রমিক পোর্টেবল অক্ষর সেট ), অথবা বন্ধনী করুন। এই ক্ষেত্রে, আচরণ অনির্দিষ্ট: একটি অনুসারী শেল একটি বিশেষ পরামিতি নামক উদ্ভাবন অনুমতি দেওয়া হয় +
প্রসারিত করতে , এবং একটি মানানসই আবেদন অনুমান করা উচিত নয় যে শেল না । শেলটি ত্রুটি প্রতিবেদন করা সহ এটির মতো পছন্দ করে অন্য কিছু করতে পারে।
উদাহরণস্বরূপ, zsh, তার পসিক্স মোড সহ, "ভেরিয়েবল সেট" হিসাবে ব্যাখ্যা করে$+b
b
এবং এর জায়গায় 1 বা 0 এর বিকল্প দেয়। এটা তোলে একভাবে জন্য এক্সটেনশন রয়েছে ~
এবং =
। এটি মানানসই আচরণ।
এটি ঘটতে পারে এমন অন্য একটি জায়গা echo "a$ b"
। আবার, শেলটি যেমনটি ইচ্ছা তেমন করার অনুমতি দেয় এবং আপনি $
যদি আক্ষরিক আউটপুট চান তবে স্ক্রিপ্ট লেখক হিসাবে আপনাকে এড়ানো উচিত । আপনি যদি এটি না করেন তবে এটি কাজ করতে পারে তবে আপনি এটির উপর নির্ভর করতে পারবেন না। এটি স্পেসিফিকেশনের পরম অক্ষর, তবে আমি মনে করি না যে এই ধরণের গ্রানুলারিটিটি উদ্দেশ্যযুক্ত বা বিবেচিত হয়েছিল।
সংক্ষেপে
echo ab$
: আক্ষরিক আউটপুট, সম্পূর্ণ নির্দিষ্ট
echo a$ b
: আক্ষরিক আউটপুট, সম্পূর্ণ নির্দিষ্ট
echo a$ b$
: আক্ষরিক আউটপুট, সম্পূর্ণ নির্দিষ্ট
echo a$b
: b
সম্পূর্ণ পরামিতি পরামিতি প্রসারিত
echo a$-b
: -
সম্পূর্ণ নির্দিষ্টভাবে নির্দিষ্ট পরামিতিগুলির প্রসারণ
echo a$+b
: অনির্দিষ্ট আচরণ
echo "a$ b"
: অনির্দিষ্ট আচরণ
একটি জন্য $
একটি শব্দ শেষে, আপনি আচরণের উপর নির্ভর করার অনুমতি দেওয়া এবং এটা আক্ষরিক চিকিত্সা এবং কাছে হস্তান্তর করা উচিত নয় echo
তার যুক্তি অংশ হিসেবে কমান্ড। এটি শেলের উপর একটি কনফারেন্সের প্রয়োজনীয়তা।
$
অর্জন করতে পারে?" কোন একক বিশেষ অর্থ অর্পিত হয়$
; এটি পরামিতি সম্প্রসারণ${...}
, কমান্ড প্রতিস্থাপন$(...)
এবং পাটিগণিতের এক্সপ্রেশনগুলির মতো একাধিক, তবে স্বতন্ত্র, প্রসারকে উপস্থাপন করতে ব্যবহৃত হয়$((...))
। কিছু শেল অতিরিক্ত প্রসঙ্গে যেমনksh
'কমান্ড-সাবস্টিটিউশন বৈকল্পিকx=${ echo foo; echo bar;}
(যা$(...)
একটি সাবশেলে কমান্ডগুলি প্রয়োগ না করে মান থেকে পৃথক হয়) প্রবর্তন করে ।