কমান্ডলাইনে ডাবলকোটস "", সিঙ্গলকোটস '' এবং ব্যাকটিক্স `between এর মধ্যে পার্থক্য?


43

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

" " double quotes

' ' single quotes

` ` backticks

উত্তর:


43

উদাহরণস্বরূপ, ভেরিয়েবল ( ) fooরয়েছে তা বিবেচনা করুন ।unamefoo=uname

  • echo "$foo"আউটপুট uname, পাঠ্যে ভেরিয়েবল প্রতিস্থাপন।
    • কোটের $অভ্যন্তরে আক্ষরিক চরিত্রের জন্য ", ব্যবহার করুন \$; একটি আক্ষরিক জন্য ", ব্যবহার \"
  • echo '$foo'ফলাফল $foo, সঠিক স্ট্রিং।
    • এমনকি ভিতরে উদ্ধৃতি 'হিসাবে পালাতে পারবেন না । তবে আপনি ব্যবহার করতে পারেন ।\'''foo'\''bar'
  • echo `$foo`আউটপুটস Linux, ভেরিয়েবলের বিষয়বস্তু নির্বাহ করে এবং echoএটি মুদ্রণ করা।

\সবসময় আক্ষরিক চিকিত্সা করা হয় যখন একক উদ্ধৃতির মধ্যে ঘিরা, এমনকি যদি এটি একটি পূর্বে '। একটি খোলার পরে ', পরবর্তীটি 'সর্বদা সমাপ্তি উদ্ধৃতি হিসাবে ব্যাখ্যা করা হয়। 'একটি একক-উদ্ধৃত স্ট্রিংয়ের জন্য উদ্ধৃতি দেওয়ার মতো কিছু উদ্ধৃতি শেষ করে, 'স্বতন্ত্রভাবে পালিয়ে যাওয়া এবং আবার উদ্ধৃতকরণ শুরু করে অর্জন করা যেতে পারে । এটি, যখন \'খোলার এবং বন্ধ করার 'অক্ষরের মধ্যে কাজ করে না , '\''তা করে। (দেখুন গিলেজ এর আমার পোস্ট এক যখন আমি একই ভুল করেছেন সেই ভাষাতে সংশোধন বিস্তারিত জানার জন্য।)
Eliah মধ্যে Kagan

11

এটি ব্যাশ ম্যানুয়ালটির প্রাসঙ্গিক বিভাগে খুব সুন্দরভাবে ব্যাখ্যা করা হয়েছে । সংক্ষেপে, একক উদ্ধৃতিগুলির মধ্যে যে কোনও কিছুই আক্ষরিক অর্থে ব্যাখ্যা করা হয়। সুতরাং, উদাহরণস্বরূপ:

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

অকেজো সংস্করণগুলির সাথে এটি তুলনা করুন:

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

ডাবল উদ্ধৃতিগুলি পরিবর্তনশীল প্রসারণের অনুমতি দেয় (ইতিহাসের সম্প্রসারণ এবং কিছু অন্যান্য জিনিসও)। আপনি যখন প্রসারিত দেখতে চান এমন কোনও কিছু নিয়ে কাজ করছেন তখন মূলত আপনি এগুলি ব্যবহার করেন। উদাহরণ স্বরূপ:

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

অন্য কথায়, একক উদ্ধৃতি শেল থেকে সম্পূর্ণরূপে একটি স্ট্রিংকে সুরক্ষা দেয় যখন ডাবল কোটগুলি কিছু জিনিস রক্ষা করে (উদাহরণস্বরূপ স্পেসস) তবে ভেরিয়েবল এবং বিশেষ অক্ষরগুলি সঠিকভাবে প্রসারিত / ব্যাখ্যা করার অনুমতি দেয়।


1
বাস্তবের পরে ওপিকে পরিবর্তন করা হয়েছে কিনা তা নিশ্চিত নন, তবে এই উত্তরটিতে ব্যাকটিক্সের উল্লেখ নেই?
আলেকজান্ডার মিলস

5

একক উদ্ধৃতি ( '') উদ্ধৃতিগুলির মধ্যে আবদ্ধ প্রতিটি অক্ষরের আক্ষরিক মান সংরক্ষণ করতে ব্যবহৃত হয়।

ডাবল উদ্ধৃতি ( "") ব্যবহার করে, ডলারের চিহ্ন ( $), ব্যাকটিক্স (পশ্চাৎ একক উদ্ধৃতি, ``) এবং ব্যাকস্ল্যাশ ( \) ব্যতীত সমস্ত ঘরের অক্ষরের আক্ষরিক মান সংরক্ষণ করা হবে ।

ব্যাক-টিকস ( ``) এর অভ্যন্তরে আবদ্ধ হওয়ার পরে শেলটি "ব্যাক-টিকসের অভ্যন্তরে কমান্ডের আউটপুট" বলতে কিছু অর্থ ব্যাখ্যা করে। কমান্ডের আউটপুট কমান্ডের পরিবর্তে নির্ধারিত হওয়ায় এটি "কমান্ড সাবস্টিটিউশন" হিসাবে পরিচিত।

রেফারেন্স:


3
echo '$HOME' is "$HOME"

একক উদ্ধৃতিগুলি পরিবর্তনশীল প্রসারকে বাধা দেয়, তবে ডাবল উদ্ধৃতি এটির অনুমতি দেয়।


2

আমি কেবল সাধারণভাবে কথা বলছি তবে:

""- আউটপুট দেওয়ার আগে তাদের মধ্যে কিছু তথ্য প্রক্রিয়া করার জন্য ব্যবহৃত হয়। (পিএইচপি-র মতো।)

  • উদাহরণস্বরূপ: name=NESS; echo "Hello my name is $name"আউটপুট হবে:Hello my name is NESS

''- আউটপুট যেমন হয় তেমন প্রদর্শন করতে ব্যবহৃত হয়। (পিএইচপি-তেও পছন্দ করুন))

  • উপরের উদাহরণ ব্যবহার করে, এটি আউটপুট হবে Hello my name is $name

সুতরাং ডাবল এবং একক উদ্ধৃতিগুলির মধ্যে পার্থক্য হ'ল ডাবল উদ্ধৃতিগুলি ভেরিয়েবলটি প্রক্রিয়া করে এবং মানটি দেখায়, যখন একক উদ্ধৃতি প্রক্রিয়াকরণ ছাড়াই ভেরিয়েবলের নাম দেখায়।

`` - পরবর্তীতে অন্য ভেরিয়েবলের জন্য নির্ধারিত কমান্ডগুলি উদ্ধৃত করতে ব্যবহৃত হয়।


1

একক উদ্ধৃতিগুলি এমন একটি মান আবদ্ধ করে যা আক্ষরিকভাবে নেওয়া উচিত: সমস্ত প্রকারের বিস্তৃতি দমন করা হয়। সাধারণত ব্যবহৃত যদি মান অন্তর্ভুক্ত বা সাদা স্থান (স্থান, ট্যাব, নতুন লাইন), অথবা বিশেষ অক্ষর (অন্তর্ভুক্ত হতে পারে $, \, `) যে ব্যবহারকারী সম্প্রসারিত করা / শেল দ্বারা বিশেষভাবে চিকিত্সা চায় না।

ডাবল উদ্ধৃতিগুলি এমন একটি মান আবদ্ধ করে যা ভেরিয়েবল এবং অক্ষর প্রতিস্থাপন সম্পন্ন করে। যখন আউটপুটটিতে শ্বেতস্পেস থাকতে পারে তখন প্রয়োজনীয় এবং একক মান হিসাবে নির্ধারিত হতে হবে।

পিছনে উদ্ধৃতিগুলি একটি কমান্ড আবদ্ধ করে, এর ফলাফলগুলি মান হিসাবে চায়। আরও নতুন শেলগুলি সেই $(...)স্থানে ব্যবহারের অনুমতি দেয় `...`। আমি আরও নতুন পদ্ধতি পছন্দ।

নিম্নলিখিত কোডটি কী ঘটছে তা বুঝতে সহায়তা করতে পারে।

সিএমডি = 'এলএস'।
প্রতিধ্বন বর্গ: $ সিএমডি
সেট $ সিএমডি
প্রতিধ্বনি কাঁচা 1: $ 1
প্রতিধ্বনি কাঁচা: $ *
"$ সিএমডি" সেট করুন
প্রতিধ্বনি dq: $ 1
প্রতিধ্বনি বেক: $ $ সিএমডি` `
প্রতিধ্বনি নতুন: $ ($ সিএমডি)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.