উত্তর:
এই হল ব্যাকটিক । ব্যাকটিক কোনও উদ্ধৃতি চিহ্ন নয়। এর খুব বিশেষ অর্থ রয়েছে। আপনি ব্যাকটিক্সের মধ্যে যা টাইপ করেন তা প্রধান কমান্ডের আগে শেল দ্বারা মূল্যায়ন (সম্পাদিত) হয় (যেমন chown
আপনার উদাহরণগুলিতে), এবং সেই এক্সিকিউশনটির আউটপুট সেই কমান্ড দ্বারা ব্যবহৃত হয়, ঠিক যেমন আপনি সেই জায়গায় আউটপুট টাইপ করতে চান কমান্ড লাইন
তাতে কি
sudo chown `id -u` /somedir
কার্যকরভাবে রান ( আপনার ব্যবহারকারী আইডি উপর নির্ভর করে ) হয়:
sudo chown 1000 /somedir
\ \ \ \
\ \ \ `-- the second argument to "chown" (target directory)
\ \ `-- your user ID, which is the output of "id -u" command
\ `-- "chown" command (change ownership of file/directory)
`-- the "run as root" command; everything after this is run with root privileges
কেন অনেক পরিস্থিতিতে ব্যাকটিক্স ব্যবহার করা ভাল ধারণা নয় তা জানতে এই প্রশ্নটি একবার দেখুন ।
বিটিডব্লু, আপনি যদি কখনও আক্ষরিকভাবে ব্যাকটিক ব্যবহার করতে চান, উদাহরণস্বরূপ স্ট্রিংয়ে, আপনি এটির \
আগে একটি ব্যাকস্ল্যাশ রেখে ) এটি থেকে বাঁচতে পারেন ।
$()
বেশিরভাগ পরিস্থিতিতে এটি ব্যবহার করা ভাল অনুশীলন , এটি ব্যাকটিক্সকে আরও খারাপ জিনিস করে না । ব্যবহারিক উদ্দেশ্যে, একজনকে স্বীকার করতে হবে যে তারা কমান্ড লাইনে টাইপ করতে অনেক দ্রুত (কমপক্ষে 5 টির তুলনায় 2 কীস্ট্রোক সহ Shift
)।
$( )
চেয়ে টাইপ করা অবশ্যই সহজ ` `
।
আমি এখানে আরও কয়েকটি পয়েন্ট যুক্ত করতে চাই।
ব্যাকটিককে `…`
আসলে কমান্ড সাবস্টিটিউশন বলা হয় । কমান্ড প্রতিস্থাপনের উদ্দেশ্য হ'ল ব্যাকটিকের ভিতরে রাখা কমান্ডটি মূল্যায়ন করা এবং প্রকৃত আদেশের যুক্তি হিসাবে তার ফলাফল সরবরাহ করা।
কমান্ড প্রতিস্থাপনটি দুটি উপায়ে করা যেতে পারে একটি ব্যবহার করছে $(…)
এবং অন্যটি `…`
। উভয়ই একই রকম কাজ করে তবে $(…)
ফর্মটি আধুনিক পদ্ধতি এবং এর আরও স্পষ্টতা এবং পাঠযোগ্যতা রয়েছে।
এবং তাই
sudo chown $(id -u) /somedir
অন্যের চেয়ে বেশি পছন্দ করা যায়।
এবং আপনার আরও একটি বিষয় এখানে লক্ষ্য করতে হবে হ'ল বাশ ডকুমেন্টে উল্লিখিত বাশ উদ্ধৃতি সংক্রান্ত নিয়মের সাথে কমান্ড প্রতিস্থাপনের সম্পর্ক ।
প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিগুলির মধ্যে উপস্থিত হয় তবে শব্দ বিভাজন এবং ফাইলের নাম সম্প্রসারণ ফলাফলগুলিতে করা হয় না।
$(...)
বাসাগুলি আরও ভাল।
$()
এবং "``"
একইভাবে কাজ করবেন না
স্পষ্টতার একটি নোট খুব কমই কভার করা হয়েছে:
ব্যাকটিকস (কখনও কখনও গ্রেভও বলা হয় কারণ এটি ফরাসি এবং অন্যান্য ভাষায় সাধারণ উচ্চারণ হিসাবে দ্বিগুণ) কেবলমাত্র স্ট্যান্ডার্ড আউটপুটকে প্রতিস্থাপন করে তবে স্ট্যান্ডার্ড ত্রুটি নয়।
আগের উদাহরণটি চালিয়ে যেতে:
file `which hostname`
প্রত্যাশার মতো কাজ করবে তবে এতে:
file `which hostnameX`
which
একটি ত্রুটি ফিরে আসবে, এবং সেই আউটপুটটি স্ট্যান্ডার্ড ত্রুটিতে চলে যাবে, পরিবর্তে কমান্ড লাইনের পরিবর্তে file
; কোনও মানক আউটপুট আসবে না, যা আপনি চালিয়ে নিশ্চিত করতে পারেন:
which hostnameX
which hostnameX 2>/dev/null
এক্ষেত্রে,
file `which hostnameX`
দুটি ত্রুটি বার্তা উত্পন্ন করবে (প্রথমটি, which hostnameX
ফাইলের কারণে প্রথমটির কারণে এবং দ্বিতীয়টি নিজের ফাইলের কারণে, এটি দেখতে পাবে যে ফাইলটির নামটি অনুপস্থিত এবং পুরো কমান্ড)
মূলত ন্যায়বিচারে হ্রাস পাবে:
file
যা অবশ্যই খারাপ ব্যবহার এবং ব্যবহারের ত্রুটি ফিরিয়ে দেবে।
(আপনি যদি নিজে নিজে এটি পরীক্ষা করতে চান তবে চেষ্টা করতে পারেন:
file `which hostnameX 2>/dev/null` # just the file-command bad-usage error msg is printed
file `which hostnameX 2>/dev/null` 2>/dev/null # now nothing is printed on the screen :)
ব্যাকটিক বদ্ধ স্ট্রিংয়ের সামগ্রীগুলি চালায়, তাই এরকম কিছু
file `which hostname`
হোস্টনেম কমান্ডের পথটি খুঁজে বের করবে এবং তারপরে আপনাকে এটি কীভাবে তৈরি করা হয়েছিল তা জানাবে।
আপনি আপনার প্রশ্নের যে আদেশটি দিয়েছেন id -u
তা কার্যকর ব্যবহারকারী আইডি পেতে চালায় এবং তারপরে / ব্যবহারকারীর / সামডির মালিকানা পরিবর্তন করে।
ব্যাকটিকগুলি কমান্ড বিকল্পের সাথে সাদৃশ্যপূর্ণ। এই ব্যাকটিক সিনট্যাক্স সেকেলে, এবং ডলার চিহ্ন জানেন দুই প্রথম বন্ধনী সঙ্গে সাধারণ হল: $()
।
কমান্ড প্রতিস্থাপন হ'ল একটি কমান্ড কার্যকর করতে এবং পরবর্তী ব্যবহারের জন্য তার আউটপুটটি ভেরিয়েবলের মধ্যে সংরক্ষণের জন্য ডেডিকেটেড সিনট্যাক্স সহ একক ক্রিয়াকলাপ।
thedate=$(date)
এরপরে আমরা ফলাফলটি মুদ্রণ করতে পারি: 'তারিখটি% s \ n' "$ থেটেট" ``
$()
।date
।$(date)
যা এর আউটপুট প্রতিস্থাপন itutionprintf
উপরের কমান্ড অনুসারে আমরা ভেরিয়েবল দ্বারা আউটপুট মান ধরে রাখি ।
$(your expression)
আপনাকে একইভাবে কাজ করার আরও ভাল উপায় হ'ল$()
বাসা বাঁধার জন্য। উদাহরণস্বরূপ:cd $(dirname $(type -P touch))
ধারণকারী ডিরেক্টরির মধ্যে ইচ্ছার সিডি কোনটাtouch
কমান্ড