বাশ এবং জ্যাশ ছাড়া অন্য শেলগুলি কী এএনএসআই-সি উদ্ধৃতি সমর্থন করে? যেমন string 'স্ট্রিং'


13

আমার একটি শেল স্ক্রিপ্ট রয়েছে যা এর আউটপুটে সবুজ চেকমার্ক মুদ্রণ করতে নিম্নলিখিত ব্যবহার করে:

col_green="\e[32;01m"
col_reset="\e[39;49;00m"

echo -e "Done ${col_green}✓${col_reset}"

বাশের এএনএসআই-সি উদ্ধৃতি সম্পর্কে পড়ার পরে , আমি বুঝতে পেরেছিলাম যে আমার রঙের ভেরিয়েবলগুলি সেট করার সময় আমি এটি ব্যবহার করতে পারি এবং -eপতাকাটি আমার প্রতিধ্বনি থেকে সরিয়ে ফেলতে পারি ।

col_green=$'\e[32;01m'
col_reset=$'\e[39;49;00m'

echo "Done ${col_green}✓${col_reset}"

এটি আকর্ষণীয় বলে মনে হচ্ছে, যেহেতু এর অর্থ বার্তাটি বাশের বিল্টিন প্রতিধ্বনি বা বাহ্যিক ব্যবহারে /bin/echo(আমি ম্যাকোজে আছি) প্রেরণ করা হয়েছে কিনা তা সঠিকভাবে মুদ্রণ করে।

কিন্তু এটি কি স্ক্রিপ্টটি কম পোর্টেবল করে তোলে? আমি জানি বাশ এবং জেড এই শৈলীটি উদ্ধৃত করার পক্ষে সমর্থন করে তবে আমি অন্য সম্পর্কে নিশ্চিত নই।


হ্যাঁ, যেহেতু কেবলমাত্র এখন ksh এবং এর বিভিন্নতা এটিকে সমর্থন করে। তবে আইআইআরসি, এএনএসআই-সি উদ্ধৃতি পরবর্তী পসিক্স অনুমান হতে চলেছে।
cuonglm

উত্তর:


12

$'…'একটি ksh93 বৈশিষ্ট্য যা zsh, bash, mksh, FreeBSD sh এবং বুসিবক্স শ এর কিছু বিল্ডে (বুসিবক্স অ্যাশ দিয়ে নির্মিত ENABLE_ASH_BASH_COMPAT) তে উপস্থিত রয়েছে। এটি পসিক্স ভাষাতে এখনও উপস্থিত নেই। প্রচলিত বোর্ন মত শাঁস হবে না এটি ড্যাশ (যা অন্তর্ভুক্ত /bin/sh, ksh88, বোর্ন শেল, NetBSD বা SH, যশ, mksh চেয়ে pdksh অন্যান্য ডেরাইভেটিভস এবং কিছু busybox- র তৈরী করে অন্যদের মধ্যে উবুন্টু ডিফল্ট দ্বারা)।

নিয়ন্ত্রণ অক্ষর হিসাবে ব্যাকস্ল্যাশ-চিঠি এবং ব্যাকস্ল্যাশ-অক্টালকে পার্স করার একটি বহনযোগ্য উপায় ব্যবহার করা printf। এটি সমস্ত পসিএক্স-অনুবর্তী সিস্টেমগুলিতে উপস্থিত রয়েছে।

esc=$(printf '\033') # assuming an ASCII (as opposed to EBCDIC) system
col_green="${esc}[32;01m"

নোট যে \eপোর্টেবল নয়। এটি অনেকগুলি বাস্তবায়নের দ্বারা সমর্থিত printfতবে ড্যাশযুক্ত নয় ¹ পরিবর্তে অষ্টাল কোডটি ব্যবহার করুন।

¹ এটি ডেবিয়ান এবং ডেরিভেটিভগুলিতে সমর্থিত যা কমপক্ষে 0.5.8-2.4 ডায়াল করে, যেমন দেবিয়ান প্রসারিত এবং উবুন্টু 17.04 থেকে।


আপনি \eসমর্থন না করা সম্পর্কে নিশ্চিত dash? এখানে গা bold় লাল রঙে dash -c 'printf "\e[1;31m"; type printf; printf "\e[m"'মুদ্রণ করা হবে printf is a shell builtin(ড্যাশ-0.5.8)। একটি শেল যে সমর্থন করে না \eহয় yash
ম্যাসভি

@ মোসবি প্রিন্ট \e[1;31mprintf is a shell builtin \e[mএখানে। উবুন্টু 16.04, ড্যাশ 0.5.8-2.1ubuntu2 .1 0.5.8-2.10 ড্যাশ সহ উবুন্টু 18.04 এ লাল রঙের মুদ্রণ। দেখে মনে হচ্ছে উবুন্টু এটি সমর্থন করার জন্য কোনও প্যাচ তৈরি করেছিল।
গিলস 'অশুভ হওয়া বন্ধ করুন'

হ্যাঁ, দুঃখিত, দেখে মনে হচ্ছে এটি ডিবিয়ান (9.7 প্রসারিত) প্যাচ। এখানে আসল।
ম্যাসভি

0

$'...'পোর্টিংয়ের সময় সহায়তার ডিগ্রিটিও বিবেচনায় নেওয়া উচিত। POSIX লোকগুলি 'POSIX SH এই লাগাতে প্রস্তাব মধ্যে একটি বিশেষভাবে উল্লেখ:

স্টেফেন: ksh93 হ'ল শেল ... '...' আসে (যখন $'\uxxxx'[ এবং$'\Uxxxxxxxx' ] zsh থেকে আসে: http://www.zsh.org/mla/workers/2003/msg00223.html ) [^]

আমার ডেবিয়ান বুলসেয়ে আমি এখানে যা পেয়েছি তা ksh2020থেকে এটিএন্ডটি বুঝতে পারে $'\U1F600'। এটিই কেবলমাত্র "অফিসিয়াল" কর্ন শেল আমি এই নতুন ডিস্ট্রোতে পেতে পারি।

mkshএটি বিশ্লেষণ করেছেন তবে এটি সম্পূর্ণরূপে একটি ইউ + এফএফএফ দিয়ে বোট করেছেন। যেহেতু এটি একটি সিনট্যাক্স ত্রুটি সম্পর্কে অভিযোগ করেনি তাই ইউনিকোডের বোঝার সাথে কিছু ভুল হওয়া দরকার। এটি $'\U01F60'ঠিক আছে পরিচালনা করে ।


দুর্ভাগ্যক্রমে, সাম্প্রতিক অভ্যুত্থানের প্রভাব হিসাবে ksh2020 অদৃশ্য হয়ে গেছে। তবে হ্যাঁ, মূল ksh93 সমর্থন করে $'...'এবং iirc প্রথমটি কে করেছিল।
মোশি

@ Arthur2e5। ksh2020এটিএন্ডটি থেকে নয়। রেড হ্যাট থেকে আসা কয়েক জন লোক মূলত কয়েক বছর আগে এটিএন্ডটি এএসটি গিথুব গাছকে হাইজ্যাক করে ভবিষ্যতের ksh93বিকাশের নিয়ন্ত্রণ দাবি করেছেন
এফএমপুরফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.