সিনট্যাক্সের সাথে ভেরিয়েবলগুলি চাওয়ার ক্ষেত্রে কোনও পার্থক্য রয়েছে কি ${var}
এবং $(var)
? উদাহরণস্বরূপ, উপায় পরিবর্তনশীল প্রসারিত হবে বা কিছু?
সিনট্যাক্সের সাথে ভেরিয়েবলগুলি চাওয়ার ক্ষেত্রে কোনও পার্থক্য রয়েছে কি ${var}
এবং $(var)
? উদাহরণস্বরূপ, উপায় পরিবর্তনশীল প্রসারিত হবে বা কিছু?
উত্তর:
কোনও পার্থক্য নেই - এর অর্থ হুবহু একই (জিএনইউ মেক এবং পোসিক্স মেকে)।
আমি মনে করি যে $(round brackets)
চেহারাটি আরও পরিশ্রমী তবে এটি কেবল ব্যক্তিগত পছন্দ।
(অন্যান্য উত্তরগুলি GNU এর প্রাসঙ্গিক বিভাগগুলিকে নির্দেশ করে ডকুমেন্টেশন করুন, এবং নোট করুন যে আপনার বাক্য গঠনের বাক্যটি একক প্রকাশের মধ্যে মিশ্রিত করা উচিত নয়)
deploy: ${DEPS}
আমার জন্য একটি সিনট্যাক্স ত্রুটি হিসাবে হাইলাইট করেছে, তবে deploy: $(DEPS)
সঠিক হিসাবে দেখানো হয়েছে, যদিও উভয় বানানটি প্রবেশ করার সময় একই প্রভাব ফেলে make
।
চলক তথ্যসূত্র এর বুনিয়াদি অধ্যায় থেকে GNU make
ডকুমেন্টেশন রাষ্ট্র কোন পার্থক্য :
কোনও ভেরিয়েবলের মান পরিবর্তনের জন্য, একটি ডলার চিহ্ন লিখুন যার পরে বন্ধনী বা ব্রেসেসে ভেরিয়েবলের নাম লিখুন: হয় হয়
$(foo)
অথবা${foo}
ভেরিয়েবলের ফু এর বৈধ রেফারেন্স ।
ইতিমধ্যে সঠিকভাবে নির্দেশিত হিসাবে, কোনও পার্থক্য নেই তবে দুটি প্রকার ডিলিমিটরকে না মিশতে সতর্ক থাকুন কারণ এটি আনমোড জিএনইউ উদাহরণস্বরূপ ক্রিপ্টিক ত্রুটির কারণ হতে পারে ।
জিএনইউ থেকে ফাংশন কল সিনট্যাক্সের উপর ম্যানুয়াল তৈরি করুন (জোর দেওয়া খনি):
[…] যদি আর্গুমেন্টে অন্য ফাংশন কল বা পরিবর্তনশীল উল্লেখ থাকে তবে সমস্ত উল্লেখের জন্য একই ধরণের সীমানা ব্যবহার করা বুদ্ধিমানের কাজ; লিখুন
$(subst a,b,$(x))
, না$(subst a,b,${x})
। এটি পরিষ্কার হওয়ার কারণে এবং রেফারেন্সের শেষটি খুঁজে পেতে কেবল এক প্রকার ডিলিমিটারের সাথে মিল রয়েছে ।
আসলে, এটি মোটামুটি আলাদা বলে মনে হচ্ছে:
, = ,
list = a,b,c
$(info $(subst $(,),-,$(list))_EOL)
$(info $(subst ${,},-,$(list))_EOL)
আউটপুট
a-b-c_EOL
md/init-profile.md:4: *** unterminated variable reference. Stop.
তবে এখনও অবধি আমি এই পার্থক্যটি কেবল তখনই পেয়েছি যখন ভেরিয়েবলের নামটি vari {... into এ নিজেই কমা থাকে। আমি প্রথমে ভেবেছিলাম $ {... value কমাটি প্রসারিত করছিলাম মান হিসাবে অংশ হিসাবে নয়, তবে দেখা যাচ্ছে যে আমি এইভাবে এটি হ্যাক করতে পারছি না। আমি এখনও এটি বুঝতে পারি না ... কারও কাছে যদি এর ব্যাখ্যা থাকে তবে আমি জেনে খুশি হব!
You {} শৈলীর সাহায্যে শেলের মধ্যে তৈরি বিধিগুলি পরীক্ষা করতে দেয়, যদি আপনার সাথে সংশ্লিষ্ট পরিবেশের ভেরিয়েবল সেট থাকে, যেহেতু এটি ব্যাশের সাথে সামঞ্জস্যপূর্ণ।
অভিব্যক্তিটিতে ভারসাম্যহীন বন্ধনী উপস্থিত থাকলে এটি একটি পার্থক্য করে:
${info ${subst ),(,:-)}}
$(info $(subst ),(,:-)))
->
:-(
*** insufficient number of arguments (1) to function 'subst'. Stop.
ভেরিয়েবল রেফারেন্সের জন্য, এটি ফাংশনগুলির জন্য, বা বন্ধনী যুক্ত ভেরিয়েবলের নামের (খারাপ ধারণা) জন্য একটি পার্থক্য তৈরি করে
$()
মেক এবং শেল ভেরিয়েবলের মধ্যে নিজেকে বিভ্রান্তি তৈরি করতে (ইতিমধ্যে বিদ্যমান থেকে বেশি) এড়াতে মেক ব্যবহার করি। GNU ভেরিয়েবল রেফারেন্সে ডকুমেন্টেশন তৈরি করুন ।