$ '$ Foo' এবং $ "$ foo" এর মধ্যে পার্থক্য


9

ভেরিয়েবল প্রসঙ্গে একক এবং ডাবল উদ্ধৃতিগুলির মধ্যে কিছু স্নিগ্ধতা বের করতে আমার অসুবিধা হচ্ছে

আমি সংজ্ঞা দিচ্ছি:

foo=pwd

তারপরে এগুলি চালান:

echo $'$foo'

কোন ইকোস $foo( $আমার প্রতিধ্বনি কমান্ডের প্রথমটি বাদ পড়েছে)

echo $"$foo"

এই ইকোস pwd(যার অর্থ ব্যাশ প্রসারিত হয় $foo, আমার ভেরিয়েবল, এর মান হিসাবে)

echo $`$foo`

অবশেষে এই প্রতিধ্বনিগুলি $~/scripts(আমি এটি মুদ্রণের জন্য আশা করি ~/scriptsএবং না $~/scripts)

কেউ আমাকে এই পার্থক্যগুলি সনাক্ত করতে সহায়তা করতে পারে?

উত্তর:


11

পরিশেষে, গত এক কপি করে প্রিন্ট $~/scriptsকারণ $`foo`একটি আক্ষরিক তার সংমিশ্রণ $কমান্ড প্রতিকল্পন দ্বারা অনুসরণ; সুতরাং নেতৃস্থানীয়কে $আক্ষরিক হিসাবে চিহ্নিত করা হয় $এবং `$foo`কমান্ডের বিকল্প হিসাবে অনুসরণ করা হয়।


আমি কোড ট্যাগগুলি মুছে ফেলেছি এবং কেবলমাত্র "` `` `` `` `" অক্ষরের সাথে প্রতিস্থাপন করেছি ইত্যাদি আপনি যদি কোড ট্যাগ পছন্দ করেন তবে নির্দ্বিধায় দ্বিধা প্রকাশ করুন
টিম

@ টিম ধন্যবাদ, আমি ঠিক কী করেছি তা নিশ্চিত নন তবে কোনও কারণে আপনার সম্পাদিত পোস্টটি আমার প্রথম সংশোধনীর মতোই ব্যাহত হয়েছিল, তাই আমি এটিকে আবার ঘুরিয়ে দিয়েছি ... এবং এখন আমি দেখতে পাচ্ছি যে এটি সংশোধন করা ঠিক আছে। কী হয়েছে তা নিশ্চিত নন, আপনার সংস্করণে ফিরে যাওয়ার আগে ফর্ম্যাটিং স্যান্ডবক্সে এটি পরীক্ষা করে নেবে যেহেতু আমি আশঙ্কা করছি যে আমি আবার পোস্টটি ব্যাহত করতে পারি। নির্বিশেষে, প্রচেষ্টার জন্য ধন্যবাদ।
kos

নিশ্চিত, কোন সমস্যা। খনি শূন্য-প্রস্থের স্পেস ব্যবহার করে, তাই আপনি সম্পাদনা করার সময় সাবধান হন।
টিম

2

প্রথম কেস:

echo $'$foo'

কোন ইকোস $foo( $আমার প্রতিধ্বনি কমান্ডের প্রথমটি বাদ পড়েছে)

প্রথমটি $কমান্ড হিসাবে চালিত হয়। ইকো আর্গুমেন্টের মধ্যে ফাঁক প্রয়োজন হয় না, এটি কেবল তাদের গ্রহণ করে।

সুতরাং $'$foo'কমান্ডটি চালানোর জন্য ইকো প্রসারিত হয় $(যা কোনও আদেশ নয় তাই এটি এড়িয়ে চলে) এবং তারপরে প্রতিধ্বনি হয় '$foo'। যে কোনও ''কিছুই মূল্যের মূল্যে নেওয়া হয় - এটি এটিকে বা কোনও কিছুই প্রসারিত করে না। আপনি যা চান তা রাখতে পারেন '' এবং কিছুই হয় না।

আপনি যদি এটির $সাথে প্রতিস্থাপন করেন $$তবে প্রক্রিয়া আইডি প্রতিধ্বনিত হয়।


দ্বিতীয়ত:

echo $"$foo"

এই ইকোস pwd(যার অর্থ ব্যাশ প্রসারিত হয় $foo, আমার ভেরিয়েবল, এর মান হিসাবে)

কারণ ""এটি প্রসারিত করতে বাধা দেয় না। ""তুলনা করার মতো কোনও মান আছে তা নিশ্চিত করতে সাধারণত ব্যবহৃত হয়।

আপনার যদি এমন একটি ভেরিয়েবল থাকে যা খালি থাকতে পারে (যেমন এটি grepফলাফল থেকে আসে ) তবে আপনি অন্য মান / ভেরিয়েবলের সাথে তুলনা করতে চান, আপনাকে প্রথম ভেরিয়েবলটি ভিতরে রাখতে হবে ""। এটি নিশ্চিত করে যে সর্বদা চেক করার তুলনা হয়, কোডের খালি বিভাগের চেয়ে (বাশ দেখায়) যা ত্রুটি দেয়।


পরিশেষে, 3 নম্বর। এটি আকর্ষণীয়।

echo $`$foo`

এই প্রতিধ্বনি $~/scripts(আমি এটি প্রিন্ট করতে ~/scriptsএবং না আশা করি $~/scripts)

কারণ (এই ক্ষেত্রে) প্রতিধ্বনিটি $প্রথমে অক্ষরটি মুদ্রণ করছে । ব্যাকটিক্সে কিছু রাখার ফলে ভেরিয়েবলের মান কমান্ড হিসাবে চালিত হয় (ব্যাশের আরও সাম্প্রতিক সংস্করণে এটি করার আরও ভাল উপায় $(command))

সুতরাং প্রথমে এটি ইকোস হয় $তারপরে এটি প্রসারিত ​`$foo`​হয় ​`pwd`​যা চালিত হয় এবং ফিরে আসে ~/Scripts। তবে আমাদের $আগে প্রিন্ট ছিল - সুতরাং পুরো আউটপুটটি $~/Scripts


খুব কঠিন কিছু ফর্ম্যাটিংয়ের জন্য দুর্দান্ত কাজ!
অ্যারোনিকাল

1
@ আরোনিকাল ধন্যবাদ :) আপনি এটি দেখতে পারবেন না তবে শেষ বাক্যটির জন্য এখানে শূন্য-প্রস্থের কিছু স্পেস রয়েছে। কল্পিত ইন্টারনেট পয়েন্টের জন্য আমি যে জিনিসগুলি করি ...!
টিম

1
+1 ভাল উত্তর। আমি কেবল যুক্ত করব যে উদ্ধৃতি ভেরিয়েবলগুলি ডিফল্ট হওয়া উচিত যদি না আপনার কাছে নির্দিষ্ট কারণ না থাকে - কেবল সম্ভাব্য নাল মানগুলি হ্যান্ডেল করার জন্য নয়। আপনি এই সম্পর্কে আরও জানতে চেয়েছিলেন তার চেয়ে আরও বেশি জন্য unix.stackexchange.com/questions/171346/… দেখুন । ;)
জো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.