ব্যাশে একক উদ্ধৃতিযুক্ত স্ট্রিংয়ে আপনি কীভাবে এস্ট্রোফের হাত থেকে বাঁচবেন?


18

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

এখানে একটি উদাহরণ:

$ echo ''\''Hello World'\'''
'Hello World' # works

$ echo '\'Hello World\''
 > # expects you to continue input

আমি এ সম্পর্কে ব্যাখ্যা খুঁজতে চেষ্টা করেছি কিন্তু কিছুই পেলাম না। বাশ এখানে কি করছে?


echo \''Hello World'\'
গণিত

উত্তর:


19

একক উদ্ধৃতিতে, কোনও পালানো সম্ভব নয়। একক উদ্ধৃতিতে কীভাবে কোনও একক উদ্ধৃতি অন্তর্ভুক্ত করা যায় তার উপায় নেই। দেখুন বরাত দিয়েব্যক্তি ব্যাশ


1
তুমি ঠিক বলছো. কৌতুকটি এই লাইনে রয়েছে 'ব্যাকস্ল্যাশ এর আগেও একক উক্তিটি বাইটউইন একক উদ্ধৃতিতে না ঘটে' সুতরাং এটি সম্ভবত এটি বিভিন্ন অংশে বিভক্ত হয়ে যায়।
কিবিট

@ কলিন যত তাড়াতাড়িই একটি মাত্র দুটি অন্য একক উদ্ধৃতি (তবে ব্যাকস্ল্যাশড) এর ভিতরে রয়েছে, উদ্ধৃত উদ্ধৃতিটি আসল উদ্ধৃতি আর নয়। এটি কেবল একটি চর যার সাথে বিশেষ জুটিবদ্ধ বৈশিষ্ট্য নেই।
শূন্য 2cx

1
@ zero2cx: সত্য নয়:echo '\''
choroba

@ জিরো 2 সিএক্স: আমি "অভ্যন্তরের" পরিবর্তে "বাইরে" বলব।
চোরোবা

3
@ চোরোবা "সম্পূর্ণরূপে" সত্য নয়, বাশ আপনি করতে পারেনecho $'\'hello world\''
বুফ

9

পসআইএক্স-সমর্থিত একক- এবং ডাবল-উদ্ধৃতি bashছাড়াও , উদ্ধৃত স্ট্রিংয়ের মধ্যে একটি ছোট শ্রেণির পালানো অক্ষরকে (একক উদ্ধৃতি সহ) মঞ্জুরি দেওয়ার জন্য অতিরিক্ত ধরণের উদ্ধৃতি সরবরাহ করে:

$ echo $'\'Hello World\''
'Hello World'

বিভাগটির bashশেষে, ম্যান পৃষ্ঠাতে উদ্ধৃতি বিভাগটি দেখুন । ("এএনএসআই সি" অনুসন্ধান করুন))


3

আপনার পালিয়ে যাওয়া এস্ট্রোফেসের সাথে কী ঘটছে তা বোঝাতে আমরা আপনার দ্বিতীয় উদাহরণটি পরীক্ষা করব ( একক উদ্ধৃতি বা শক্তিশালী উক্তিও দেখুন ):

$ echo '\'Hello World\''
>     # expects you to continue input

এখানে, আপনি যেমনটি বলেছেন ঠিক তেমনই উদ্ধৃতিটি ঝুলিয়ে রেখেছেন। এখন শেষটি ট্রিম করুন এবং এটিকে পরিবর্তন করুন:

                     v                                v           v
$ echo '\'Hello World     # Echo two strings: '\' and 'Hello World'.
\Hello World         ^

"হ্যালো ওয়ার্ল্ড" সাব-স্ট্রিংটি এখানে উদ্ধৃত হয়নি, তবে এটি এমন আচরণ করেছে যেন এটি শক্তিশালী উদ্ধৃতিযুক্ত। আপনার উদাহরণটি আবার ব্যবহার করে শেষের সময়টিকে আলাদাভাবে ট্রিম করুন:

                     vv                                    v (plain apostrophe)
$ echo '\'Hello World\'   # Will echo: '\' and 'Hello World''
\Hello World'        ^^   # Note that the trailing ' char is backslash escaped. 

"হ্যালো ওয়ার্ল্ড" সাব-স্ট্রিং আবার এমনভাবে আচরণ করে যেন এটি দৃ strong় উদ্ধৃত হয়, শেষে কেবল যুক্ত অ্যাডাস্ট্রোফ (পলায়ন, তাই আর কোনও উদ্ধৃতি নেই)।

যখন অন্য একক উদ্ধৃতিটি যুক্ত করা হয় (আপনার মূল উদাহরণ) স্ট্রিংটি ঝুলন্ত অবস্থায় ছেড়ে দেওয়া হয় এবং একটি নিকট-উদ্ধৃতিটির জন্য অপেক্ষা করা হয়।


3

শেলের মধ্যে উদ্ধৃতিগুলি পালনের সহজ উদাহরণ:

$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc

এটি ইতিমধ্যে খোলা একটি ( ') বন্ধ করে , \'মুদ্রণের জন্য একজনকে ( ) ছুঁড়ে রেখে , তারপরে অন্য একটি ( ') খোলার মাধ্যমে সম্পন্ন হয় ।

বিকল্পভাবে:

$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc

এটি ইতিমধ্যে একটি খোলার শেষ করে শেষ হয়েছে ( '), অন্য উদ্ধৃতিতে উদ্ধৃতি রেখে ( "'"), তারপরে অন্য একটি ( ') খুলুন ।

আপনি যা করেছেন ( '\'Hello World\''), তা হ'ল:

  1. 1 ম ঊর্ধকমা খোলা হয়েছে: '
  2. পরে ডান বন্ধ \', তাই স্ট্রিং হয়ে: '\'
  3. Hello World উদ্ধৃতি নয়।
  4. এটি না খোলায় স্ট্যান্ডেলোন অ্যাডোস্ট্রোফ ( \') স্থাপন করেছেন।
  5. সর্বশেষে অ্যাডাস্ট্রোফ ( ') স্ট্রিংটি খুলছে, তবে এমন কোনও সমাপ্তি নেই যা প্রত্যাশিত।

সুতরাং সঠিক উদাহরণটি হ'ল:

$ echo \'Hello World\'
'Hello World'

সম্পর্কিত: একক-উদ্ধৃত স্ট্রিংয়ের মধ্যে কীভাবে একক উদ্ধৃতিগুলি থেকে বাঁচবেন?

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