যখন আমরা ডলার চিহ্ন এবং প্রথম বন্ধনীতে একটি কমান্ড রাখি তখন শেলের কী অর্থ হয়: $ (কমান্ড)


110

আমি কেবল শেলের মধ্যে নীচের কোডের লাইনটি বুঝতে চাই। এটি বর্তমান ওয়ার্কিং ডিরেক্টরি পেতে ব্যবহৃত হয়। আমি সচেতন যে $(variable)নামটি পরিবর্তনশীল নামের ভিতরে মানটি ফিরিয়ে দেয় তবে কী $(command)ফেরানোর কথা? কমান্ডটি কার্যকর করার পরে এটি কি মান ফেরত দেয়? `সেক্ষেত্রে আমরা কমান্ডটি ব্যবহার করতে পারি ।

CWD="$(cd "$(dirname $0)"; pwd)"

নীচের কোডের লাইন থেকেও শেলের বিভিন্ন সংস্করণে একই আউটপুট নেওয়া যেতে পারে

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

আমি মানে বুঝতে করতে পারছি না $(cd..এবং $(dirname।

এই আদেশটি কীভাবে কার্যকর করা যায় তা বুঝতে কেউ আমাকে সাহায্য করতে পারে?


1
এবং এখানে সুবিধার / অসুবিধেও সম্পর্কে একটি প্রশ্ন $()বনাম ``: stackoverflow.com/questions/9449778/...
— কোনটি

উত্তর:


115

এর ব্যবহারের $মত ${HOME}বাড়ির মূল্য দেয়। $অনুরূপ $(echo foo)অর্থের ব্যবহার একটি বন্ধকের ভিতরে প্রথম বন্ধনীর ভিতরে যা আছে তা চালান এবং মান হিসাবে ফিরে আসুন। আমার উদাহরণস্বরূপ, আপনি fooযেহেতু প্রমিত হয়ে echoলিখবেনfoo


37
হ্যাঁ; $(...)পিছনে উদ্ধৃতি ব্যবহার করার চেষ্টা করার চেয়ে কমান্ড লেখার একটি ভাল উপায়। লেখার বিষয়টি বিবেচনা করুন: gcclib=$(dirname $(dirname $(which gcc)))/libপিছনে উদ্ধৃতি ব্যবহার করে। এমনকি মার্কডাউনে এটি করতে অসুবিধা হওয়ার আগেই, এটি আরও শক্ত কারণ আপনার নেস্টেড কমান্ডগুলির ব্যাককোটগুলি থেকে বাঁচতে হবে, যেখানে আপনি স্বীকৃতিটির সাথে নেই $(...)।
— জোনাথন লেফলার

7
প্রযুক্তিগতভাবে, $(echo foo)একটি কমান্ডের বিকল্প তৈরি করে, সাব-শেল নয়। অন্যান্য বর্তমান উত্তর এই অধিকার পায়। আমি মনে করি কমান্ড প্রতিস্থাপন একটি সাব-শেল, সাজানো মধ্যে চালানো হয়, কিন্তু তারা এখনও বিভিন্ন ধারণা।
— ট্রাইসিস

4
@ ট্রাইসিস - কমান্ডের প্রতিস্থাপনটি অবশ্যই একটি সাবশেলে চলে এবং তাই এটি লক্ষ্য করার মতো worth
— ইলিরান মালকা

2
আমি বুঝতে পারি যে ব্যাকটিকগুলি result () এর মতো একই ফলাফল তৈরি করে, তবে পার্থক্য কি নিখুঁতভাবে প্রসাধনী? vers () আরও সুস্পষ্টভাবে বাদ দিয়ে অন্যটির বিপরীতে একটি ব্যবহার করার কোনও কারণ আছে কি?
— মিশেল ট্রেসি

2
"$ লাইক $ (ইকো ফু) এর ব্যবহারের অর্থ প্যারেন্টিসির মধ্যে যা কিছু রয়েছে তা সাবশেলে চালান এবং মান হিসাবে ফিরিয়ে দিন" " ... এই বিভ্রান্তিকর হিসাবে এই কমান্ড $(echo foo)করতে চেষ্টা করবে চালানো কি ফিরিয়ে দেওয়া হয় , প্রথম বন্ধনী থেকে এটা প্রথম চালানো হবে echo fooতারপর চালানোর চেষ্টা করবে fooযা একটি ত্রুটি দেয়
— একাউন্টেন্ট م

21
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

এই আদেশটি কীভাবে কার্যকর করা যায় তা বুঝতে কেউ আমাকে সাহায্য করতে পারে?

কমান্ডের বিভিন্ন অংশে নজর দেওয়া যাক। BASH_SOURCEউত্স ফাইলের নামগুলি ধারণ করে এমন একটি বাশ অ্যারে ভেরিয়েবল। সুতরাং "${BASH_SOURCE[0]}"আপনাকে স্ক্রিপ্ট ফাইলটির নাম ফিরিয়ে দেবে।

dirnameজিএনইউ কোর্টিলস দ্বারা সরবরাহ করা একটি ইউটিলিটি যা ফাইলের নাম থেকে শেষ উপাদানটি সরিয়ে দেয়। তাই যদি আপনি এই বলে আপনার স্ক্রিপ্টটি চালানোর bash foo, "$( dirname "${BASH_SOURCE[0]}" )"ফিরে আসবে .। যদি আপনি বলেছিলেন bash ../foo, এটি ফিরে আসবে ..; জন্য bash /some/path/fooএটা ফেরত চাই /some/path।

অবশেষে, সম্পূর্ণ কমান্ডটি "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"স্ক্রিপ্টটি চালিত হওয়ার সাথে নিখুঁত ডিরেক্টরিটি পেয়েছে।

$(...) কমান্ড প্রতিস্থাপনের অনুমতি দেয়, অর্থাত্ একটি কমান্ডের আউটপুটকে কমান্ডটি প্রতিস্থাপন করতে দেয় এবং বাসা বাঁধে।


1
পার্টিতে 3 বছর দেরী হওয়ার জন্য দুঃখিত, তবে আপনি কি দয়া করে ব্যাখ্যা করতে পারেন কেন বিবৃতিটি কাজ করে? আপনি বলেছিলেন dirnameযে মৃত্যুদন্ড কার্যকর করা ফাইলটির (যেটি বর্তমান কার্যক্ষম ডিরেক্টরিটির তুলনায় আপেক্ষিক বা নিখুঁত) ফেরত দেয়, cdপিডব্লুডিকে সেই ডিরেক্টরিতে পরিবর্তন করে এবং pwdবর্তমান কার্যক্ষম ডিরেক্টরিটির পরম পথ প্রিন্ট করে। তবে তারা কেন যোগ দিচ্ছে &&? আর ব্যর্থ হলে কী DIRধরবে cd?
— খ্রিস্টান

2
@ ক্রিশ্চিয়ান, যদি ব্যর্থ হয় তবে চালানো থেকে &&বাধা দেয় , যেমন কোনও ভুল ডিরেক্টরি থাকার চেয়ে খালি থাকবে। pwdcdDIR
— চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.