স্ক্রিপ্টে একটি "ডলারসাইন-প্রিফিক্স স্ট্রিং" থাকার অর্থ কী?


81

আমি সবেমাত্র এটি একটি স্ক্রিপ্টে দেখেছি:

echo $"Stopping Apache"

ডলার সাইন কি জন্য?

আমার গবেষণা এখন পর্যন্ত:

আমি এটি ব্যাশ ম্যানুয়ালটিতে পেয়েছি:

extquote

সেট করা হলে, $'string'এবং $"string"মূল্য উদ্ধৃতি মধ্যে সঞ্চালিত হয় ${parameter}উদ্ধৃতি চিহ্ন মধ্যে লেখা প্রসারণও। এই বিকল্পটি ডিফল্টরূপে সক্রিয় করা হয়।

... তবে আমি $উপসর্গটির সাথে এবং ছাড়া স্ট্রিংগুলির মধ্যে কোনও পার্থক্য খুঁজে পাচ্ছি না :

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD

উত্তর:


111

দুটি ভিন্ন জিনিস এখানে চলছে, উভয়ই bashম্যানুয়ালটিতে নথিভুক্ত

$ '

ডলার-সাইন সিঙ্গল কোট উদ্ধৃত করার একটি বিশেষ ফর্ম:

এএনএসআই সি উদ্ধৃতি

ফর্মের শব্দগুলি 'স্ট্রিং' বিশেষভাবে চিকিত্সা করা হয়। শব্দটি স্ট্রিংয়ে প্রসারিত হয়, এএনএসআই সি স্ট্যান্ডার্ড অনুসারে ব্যাকস্ল্যাশ-পলায়নযুক্ত অক্ষর প্রতিস্থাপন করা হয়েছিল।

$ "

ডলার-সাইন ডাবল-কোট স্থানীয়করণের জন্য:

স্থানীয় অনুবাদ

ডলারের চিহ্ন ('$') এর আগে একটি ডাবল-কোটেড স্ট্রিং বর্তমান স্ট্রোক অনুসারে স্ট্রিংটি অনুবাদ করবে। যদি বর্তমান লোকেল সি বা পসিক্স হয় তবে ডলারের চিহ্নটি উপেক্ষা করা হবে। যদি স্ট্রিংটি অনুবাদ এবং প্রতিস্থাপন করা হয় তবে প্রতিস্থাপনটি ডাবল-কোটেড হয়।


22

যখন কোনও স্ট্রিং এর অভ্যন্তরে প্রসারিত হয় $'', তখন পালানোর ক্রমগুলি ব্যাখ্যা করা হয়। ম্যানপেজ থেকে:

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

একটি সহজ উদাহরণ একটি নতুন লাইনের জন্য escape n অব্যাহতি ক্রম:

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

দ্রষ্টব্য: echoঅপশন সরবরাহ না করে আপনি অন্যান্য শেলগুলিতে আলাদা ফলাফল পেতে পারেন যেমন পলায়নের ক্রমগুলি ব্যাখ্যা করতে পারে।


8
$"..."প্রশ্ন অনুসারে এর উল্লেখ নেই ।
পিটার.ও

-4

আপনি ম্যানুয়ালটির ভুল ব্যাখ্যা করছেন। আপনি শুধুমাত্র একটি প্রভাব দেখতে পাবেন যখন একটি $ -quoted স্ট্রিং ভিতরে একটি ${parameter}সম্প্রসারণ।

$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd

উত্স এবং আরও পড়ুন: https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html


6
এটি প্রশ্নের উত্তর দেয় না: $"…"কিছু আলাদা।
গিলস

4
দুঃখিত, তবে আপনার উত্তরটি ভুল: ${}এএনএসআই উদ্ধৃতি ব্যবহার করতে সম্প্রসারণ ব্যবহার করার দরকার নেই । নিজের জন্য দেখুন:echo $'ab\ncd'
rozcietrzewiacz

1
আমি মনে করি যে উত্তরটি extquoteপ্রশ্নটি জিজ্ঞাসা করছে তার পরিবর্তে ভুল ব্যাখ্যা করার চেষ্টা করেছিল ।
jw013

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