মেকফাইলে প্রথম বন্ধনী $ () এবং কোঁকড়ানো বন্ধনী $ {} সিনট্যাক্সের মধ্যে পার্থক্য কী?


110

সিনট্যাক্সের সাথে ভেরিয়েবলগুলি চাওয়ার ক্ষেত্রে কোনও পার্থক্য রয়েছে কি ${var}এবং $(var)? উদাহরণস্বরূপ, উপায় পরিবর্তনশীল প্রসারিত হবে বা কিছু?

উত্তর:


95

কোনও পার্থক্য নেই - এর অর্থ হুবহু একই (জিএনইউ মেক এবং পোসিক্স মেকে)।

আমি মনে করি যে $(round brackets)চেহারাটি আরও পরিশ্রমী তবে এটি কেবল ব্যক্তিগত পছন্দ।

(অন্যান্য উত্তরগুলি GNU এর প্রাসঙ্গিক বিভাগগুলিকে নির্দেশ করে ডকুমেন্টেশন করুন, এবং নোট করুন যে আপনার বাক্য গঠনের বাক্যটি একক প্রকাশের মধ্যে মিশ্রিত করা উচিত নয়)


11
আমি $()মেক এবং শেল ভেরিয়েবলের মধ্যে নিজেকে বিভ্রান্তি তৈরি করতে (ইতিমধ্যে বিদ্যমান থেকে বেশি) এড়াতে মেক ব্যবহার করি। GNU ভেরিয়েবল রেফারেন্সে ডকুমেন্টেশন তৈরি করুন
ইটান রেইজনার

অন্যান্য উত্তরগুলিতে কেবল মূল্যবান অতিরিক্ত পয়েন্টগুলি লক্ষ্য করার পক্ষে আমি তাদের সংজ্ঞাটি প্রত্যাখ্যান করেও এই উত্তরটির সম্প্রসারণের পরামর্শ দেওয়ার জন্য ব্যবহারকারী @ এলয়িকে ধন্যবাদ জানাই।
নরম্যান গ্রে

1
কিছু সরঞ্জাম তাদের সমতা সম্মান করতে পারে না। ইন্টেলিজ আইডিইএ deploy: ${DEPS}আমার জন্য একটি সিনট্যাক্স ত্রুটি হিসাবে হাইলাইট করেছে, তবে deploy: $(DEPS)সঠিক হিসাবে দেখানো হয়েছে, যদিও উভয় বানানটি প্রবেশ করার সময় একই প্রভাব ফেলে make
অ্যামক্লাড

45

চলক তথ্যসূত্র এর বুনিয়াদি অধ্যায় থেকে GNU makeডকুমেন্টেশন রাষ্ট্র কোন পার্থক্য :

কোনও ভেরিয়েবলের মান পরিবর্তনের জন্য, একটি ডলার চিহ্ন লিখুন যার পরে বন্ধনী বা ব্রেসেসে ভেরিয়েবলের নাম লিখুন: হয় হয় $(foo)অথবা ${foo} ভেরিয়েবলের ফু এর বৈধ রেফারেন্স


13

ইতিমধ্যে সঠিকভাবে নির্দেশিত হিসাবে, কোনও পার্থক্য নেই তবে দুটি প্রকার ডিলিমিটরকে না মিশতে সতর্ক থাকুন কারণ এটি আনমোড জিএনইউ উদাহরণস্বরূপ ক্রিপ্টিক ত্রুটির কারণ হতে পারে ।

জিএনইউ থেকে ফাংশন কল সিনট্যাক্সের উপর ম্যানুয়াল তৈরি করুন (জোর দেওয়া খনি):

[…] যদি আর্গুমেন্টে অন্য ফাংশন কল বা পরিবর্তনশীল উল্লেখ থাকে তবে সমস্ত উল্লেখের জন্য একই ধরণের সীমানা ব্যবহার করা বুদ্ধিমানের কাজ; লিখুন $(subst a,b,$(x)), না $(subst a,b,${x})। এটি পরিষ্কার হওয়ার কারণে এবং রেফারেন্সের শেষটি খুঁজে পেতে কেবল এক প্রকার ডিলিমিটারের সাথে মিল রয়েছে


11

আসলে, এটি মোটামুটি আলাদা বলে মনে হচ্ছে:

, = ,
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 কমাটি প্রসারিত করছিলাম মান হিসাবে অংশ হিসাবে নয়, তবে দেখা যাচ্ছে যে আমি এইভাবে এটি হ্যাক করতে পারছি না। আমি এখনও এটি বুঝতে পারি না ... কারও কাছে যদি এর ব্যাখ্যা থাকে তবে আমি জেনে খুশি হব!


এডুয়ার্ডের উত্তরের ভিত্তিতে, যা নোট করে যে জিএনইউ ডকুমেন্টেশন তৈরি করে তাতে কোনও পার্থক্য নেই, আমি মনে করি এটি কেবল একটি বাগ হতে পারে।
কিথ এম

7
আলেকজান্দ্রি পেরিনের উত্তরে যেমন উল্লেখ করা হয়েছে, দুটি বাক্য গঠন একই লাইনে মিশ্রিত করা উচিত নয়।
লেনজ

11

You {} শৈলীর সাহায্যে শেলের মধ্যে তৈরি বিধিগুলি পরীক্ষা করতে দেয়, যদি আপনার সাথে সংশ্লিষ্ট পরিবেশের ভেরিয়েবল সেট থাকে, যেহেতু এটি ব্যাশের সাথে সামঞ্জস্যপূর্ণ।


3

অভিব্যক্তিটিতে ভারসাম্যহীন বন্ধনী উপস্থিত থাকলে এটি একটি পার্থক্য করে:

${info ${subst ),(,:-)}}
$(info $(subst ),(,:-)))

->

:-(
*** insufficient number of arguments (1) to function 'subst'.  Stop.

ভেরিয়েবল রেফারেন্সের জন্য, এটি ফাংশনগুলির জন্য, বা বন্ধনী যুক্ত ভেরিয়েবলের নামের (খারাপ ধারণা) জন্য একটি পার্থক্য তৈরি করে

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