শেলের বিশেষ অক্ষরগুলিকে মোড়ানোর জন্য একক উদ্ধৃতি ব্যবহার করার সময় কীভাবে `একক উদ্ধৃতি` প্রতিধ্বনি করবেন?


26

আমি আজ http://www.tutorialspPoint.com/unix/unix-quoting-mechanisms.htm থেকে শেল টিউটোরিয়ালটি পড়ছি

এতে এটি উল্লেখ করা হয়েছে:

স্ট্রিংয়ের আউটপুট হওয়ার জন্য যদি একটি একক উদ্ধৃতি উপস্থিত হয়, আপনি সম্পূর্ণ স্ট্রিংটি একক উদ্ধৃতিতে রেখে দেবেন না পরিবর্তে আপনি ব্যাকস্ল্যাশ () ব্যবহার করে নীচে যাবেন:

echo 'It\'s Shell Programming'

আমি এটি আমার সেন্টো সার্ভারে চেষ্টা করেছি, এটি কাজ করে না, >আমাকে আরও টাইপ করার ইঙ্গিত দেওয়ার জন্য অনুরোধ জানায়।

আমি ভাবছিলাম যেহেতু দুই একক উদ্ধৃতি স্বাভাবিক অক্ষর, যা পালাবার প্রতীক অন্তর্ভুক্ত প্রতিটি বিশেষ অক্ষর রুপান্তর, \, কিন্তু বাদ নিজেই ',
কিভাবে আমি একটি একক একক উদ্ধৃতি উপস্থাপিত করে 'একটি একক উদ্ধৃত ফ্রেজ?


1
কেন echo It\'s Shell Programmingবা ব্যবহার করবেন না echo "It's Shell Programming"?
কুওল্ম

@ কুওগলম, কারণ আমি 8:51echo Wow, I'm going to have lots of $$$$$$ now
জেন

2
সুতরাং $আপনারও ডাবল উদ্ধৃতি ব্যবহার করা উচিত এবং পালাতে হবে। মত echo Wow, I\'m going to have lots of \$\$\$\$\$\$ nowবা ঠিক কিছুecho Wow, I\'m going to have lots of '$$$$$$' now
কিউংলম

@ কুওগলম, হ্যাঁ, আমি এটি করতে পারি এবং আমি কীভাবে এটি করতে পারি তা আমি জানি। তবে আমি যে টিউটোরিয়ালটি পড়েছি তা মনে হচ্ছে আত্মবিশ্বাসী যে একক উদ্ধৃত বাক্যাংশের মধ্যে একক উদ্ধৃতি থেকে বাঁচার উপায় আছে, তবে টিউটোরিয়ালের প্রদত্ত উদাহরণটি কার্যকর হয় না। সুতরাং আমি ভাবছি যে সমাধানটি হয়তো কেউ জানে।
জেন

1
এ কেমন? echo 'It'"'"'s Shell Programming'। আমি কেবল এটি 3 টি স্ট্রিং হিসাবে বিভক্ত করছি, প্রথমটি এবং শেষটি একক উদ্ধৃতি দ্বারা বেষ্টিত, তবে মাঝেরটিতে ডাবল উদ্ধৃতি দ্বারা বেষ্টিত একটি একক উদ্ধৃতি রয়েছে।
jcbermu

উত্তর:


49

টিউটোরিয়ালটি ভুল।

পসিক্স বলেছেন:

একক-উদ্ধৃতিগুলির মধ্যে একটি একক উদ্ধৃতি ঘটতে পারে না।

এখানে কিছু বিকল্প রয়েছে:

echo $'It\'s Shell Programming'  # ksh, bash, and zsh only, does not expand variables
echo "It's Shell Programming"   # all shells, expands variables
echo 'It'\''s Shell Programming' # all shells, single quote is outside the quotes
echo 'It'"'"'s Shell Programming' # all shells, single quote is inside double quotes

আরও পঠন: উক্তি - গ্রেগের উইকি


4
আরও একটি: echo 'It''s Shell Programming'- rc_quotesবিকল্প সেট সহ zsh (এবং আরসি শেলও খুব বেশি) - একক উদ্ধৃতিগুলির মধ্যে একক একক উদ্ধৃতিগুলির একটি একক একক উদ্ধৃতি উপস্থাপন করে।
মিশা পলিটোভস্কি

5
আমি মাঝে মাঝে ব্যবহার করি q="'"এবং qq='"'এই ক্লিনারটি তৈরি করতে। এটি তখন অনুমতি দেয় echo "It${q}s ${qq}Shell Programming${qq}"(পিছনে অক্ষরগুলি দিয়ে কোঁকড়া বন্ধনী প্রয়োজন)। POSIX-নিরাপদ। বাইরের স্তরটি অবশ্যই ডাবল-কোটেড হওয়া উচিত।
অ্যাডাম কাটজ

1

তুমি ব্যবহার করতে পার:

sed "s/'"'/&\\&&/g
     s/.*/'"'&'"'/
' <<IN
$arbitrary_value
IN

নিরাপদে উদ্ধৃতি শুল্কে প্রতি লাইনে একটি মান রেখা।

শেল নির্ভর করে, আপনারও করার বিকল্প থাকতে পারে:

printf %q\\n "$arbitrary_value"

যদিও আমি সাধারণত করতে পছন্দ করি:

a=$(alias "a=$arbitrary_value" a); a=${a#*=}

আরও একটি ম্যানুয়াল পদ্ধতির মত দেখতে পারে:

sq(){ set \' "$1"
      while case $2 in (*\'*) :;;
      (*) ! RETURN="$1$2'"     ;;esac
      do  set "$1${2%%\'*}'\''" "${2#*\'}"
      done
}

... যা অন্তত কাঁটাচামুক্ত।


1
আপনি কী সম্পর্কে কথা বলছেন সে সম্পর্কে আমার সম্পূর্ণ ধারণা নেই, বাক্যাংশটি বাদে printf %q\\n "$arbitrary_value"অন্যরা খুব জটিল।
জেন

1

যদি অন্য কোনও ব্যক্তি ফাইলে একক এবং ডাবল উদ্ধৃতিগুলির মিশ্রণের জন্য আসে, এটিও কাজ করছে:

cat > its-shell-programing.txt << __EOF__
echo $'It\'s Shell Programming'
echo "It's Shell Programming"
echo 'It'\''s Shell Programming'
echo 'It'"'"'s Shell Programming'
__EOF__

শেলটি যে পরিবর্তনশীল হিসাবে দেখতে পাবে তার সমস্ত কিছুই অবশ্যই ব্যাকস্ল্যাশ দ্বারা এড়ানো উচিত:

cat >> its-shell-programing.txt << __EOF__
echo \$It\'s Shell Programming
__EOF__
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.