আমি স্ক্রিপ্টিং বৈশিষ্ট্য আটকে যাব। সমৃদ্ধ ইন্টারেক্টিভ বৈশিষ্ট্যগুলি (কমান্ড লাইন সংস্করণ, সমাপ্তি, প্রম্পটস, ইত্যাদি) পুরোপুরি বেমানান উপায়ে একইরকম প্রভাব অর্জন করতে খুব আলাদা হতে থাকে। Zsh এ কোন বৈশিষ্ট্য রয়েছে এবং বাশ থেকে অনুপস্থিত বা এর বিপরীতে রয়েছে? ইন্টারেক্টিভ ব্যবহারের জন্য কয়েকটি পয়েন্টার দেয়।
ব্যাশের নিকটতম জিনিসটি এটিটি কেএস ৯৯ বা ম্যাক্স (কর্ন শেল এবং একটি ক্লোন) হবে। জেডএসের বৈশিষ্ট্যগুলির একটি উপসেট রয়েছে তবে আপনার এটি zsh নেটিভ মোডে নয়, ksh এমুলেশন মোডে চালানো দরকার।
আমি পসিক্স বৈশিষ্ট্যগুলি (যা কোনও আধুনিক shশেলের মধ্যে উপলব্ধ ), না তুলনামূলকভাবে অস্পষ্ট বৈশিষ্ট্যগুলি বা ইন্টারেক্টিভ ব্যবহারের জন্য উপরে উল্লিখিত বৈশিষ্ট্যগুলি হিসাবে তালিকাবদ্ধ করব না। ডেবিয়ান হুইজি হিসাবে পাওয়া পর্যবেক্ষণগুলি বশ ৪.২, কেএস ৯৩ ইউ এবং ম্যাক্স ৪০.৯.২০১২০630০ অনুসারে বৈধ।
$'…'(ব্যাকস্ল্যাশ ইন্টারপোলেশন সহ আক্ষরিক স্ট্রিং) ksh93 এবং mksh এ উপলব্ধ। `$"… "(অনুবাদিত স্ট্রিং) বাশ-নির্দিষ্ট।
মিক্স এবং ksh93 ;&একটি caseবিবৃতিতে পড়তে হয়েছে, তবে ;;&পরবর্তী কেসগুলি পরীক্ষা করার জন্য নয় । মাকশ এর ;|জন্য রয়েছে এবং সাম্প্রতিক মিক্স ;;&সামঞ্জস্যতার অনুমতি দেয় ।
((…))পাটিগণিতের এক্সপ্রেশন এবং [[ … ]]পরীক্ষাগুলি হ'ল ksh বৈশিষ্ট্য। কিছু শর্তাধীন অপারেটর পৃথক, নীচে "শর্তসাপেক্ষ অভিব্যক্তি" দেখুন।
Ksh এবং বাশ উভয়েরই কপোরেসেস রয়েছে তবে তারা আলাদাভাবে কাজ করে।
Mksh এবং ksh93 function name {…}স্ট্যান্ডার্ড ছাড়াও ফাংশন সংজ্ঞাগুলির জন্য সিনট্যাক্সকে সমর্থন করে name () {…}তবে functionksh এ ব্যবহার করে স্কোপিংয়ের নিয়ম পরিবর্তিত হয়, সুতরাং name () …সামঞ্জস্যতা বজায় রাখতে আঁকড়ে থাকুন। ফাংশন নামের অনুমোদিত অক্ষরগুলির নিয়মগুলি পৃথক হয়; আলফানিউমেরিকস এবং লেগে থাকা _।
Ksh93 এবং mksh সমর্থন বন্ধনী সম্প্রসারণ {foo,bar}। Ksh93 সংখ্যাযুক্ত রেঞ্জগুলিকে সমর্থন {1..42}করে তবে ম্যাক্স তা সমর্থন করে না।
Ksh93 এবং mksh সমর্থন সাবস্ট্রিং নিষ্কাশন ${VAR:offset}এবং ${VAR:offset:length}, কিন্তু না কেস মত ভাঁজ ${VAR^}, ${VAR,}ইত্যাদি আপনার সাথে ক্ষেত্রে রূপান্তর করতে পারি না typeset -lএবং typeset -uউভয় ব্যাশ ও ksh হবে।
তারা ${VAR/PATTERN/STRING}বা এর সাথে প্রতিস্থাপন সমর্থন করে ${VAR/PATTERN//STRING}। STRING এর উদ্ধৃতি বিধিগুলি কিছুটা পৃথক, সুতরাং STRING এ ব্যাকস্ল্যাশগুলি (এবং সম্ভবত অন্যান্য অক্ষরগুলি) এড়িয়ে চলুন (একটি পরিবর্তনশীল তৈরি করুন এবং ${VAR/PATTERN/$REPLACEMENT}প্রতিস্থাপনে উদ্ধৃতি অক্ষর থাকলে পরিবর্তে ব্যবহার করুন)।
এরে সম্প্রসারণ ( ${ARRAY[KEY]}, "${ARRAY[@]}", ${#ARRAY[@]}, ${!ARRAY[@]}) ksh মত ব্যাশ করছি না।
${!VAR}বিস্তৃত ${OTHERVAR}যখন মান VARহয় OTHERVAR(পরোক্ষ পরিবর্তনশীল রেফারেন্স) ব্যাশ-নির্দিষ্ট (ksh সঙ্গে ভিন্ন কিছু নেই ${!VAR})। Ksh এ এই দ্বিগুণ প্রসারণ পেতে আপনার পরিবর্তে নামের রেফারেন্স ব্যবহার করতে হবে ( typeset -n VAR=OTHERVAR; echo "$VAR")। ${!PREFIX*}একই কাজ করে।
প্রক্রিয়া প্রতিস্থাপন <(…)এবং >(…)mshh এ নয় ksh93 এ সমর্থিত।
Ksh প্রসারিত গ্লোব নিদর্শনগুলি যা shopt -s extglobব্যাশে সক্রিয় করার প্রয়োজন তা সবসময় ksh93 এবং mksh এ উপলব্ধ।
মাকশ চরিত্রের শ্রেণীর মতো সমর্থন করে না [[:alpha:]]।
বাশ এবং ksh93 সিউডো-ফাইলগুলি সংজ্ঞায়িত করে এবং , কিন্তু ম্যাক্স তা দেয় না।/dev/tcp/HOST/PORT/dev/udp/HOST/PORT
স্ক্রিপ্টগুলিতে পুনর্নির্দেশে ওয়াইল্ডকার্ডগুলি প্রসারিত করা (যেমন ফাইলের নামটি প্যাটার্নের সাথে একমাত্র মিল হিসাবে var="*.txt"; echo hello >$aলিখিতভাবে লেখা a.txt) বাশ-নির্দিষ্ট বৈশিষ্ট্য (অন্যান্য শেলগুলি স্ক্রিপ্টগুলিতে কখনও তা করে না)।
<<< এখানে স্ট্রিংগুলি ব্যাশের মতো ksh এ কাজ করে।
>&সিনট্যাক্স ত্রুটিগুলি পুনর্নির্দেশের শর্টকাটটিও mksh দ্বারা সমর্থিত তবে ksh93 দ্বারা নয়।
[[ … ]] ডাবল বন্ধনী সিনট্যাক্স
Ksh থেকে ডাবল ব্র্যাকেট সিনট্যাক্স উভয় এটিটি ksh93 এবং ব্যাশের মতো ম্যাক্স দ্বারা সমর্থিত।
ফাইল অপারেটর
Ksh93, mksh এবং bash POSIX- তে একই এক্সটেনশানগুলিকে সমর্থন করে, যার -aএকটি অপ্রচলিত প্রতিশব্দ -e, -k(স্টিকি), -G(ইজিডের মালিকানাধীন), -O(ইউইডির মালিক), -ef(একই ফাইল), -nt(এর চেয়ে -otপুরানো) এর চেয়ে বড় রয়েছে including
-N FILE (সর্বশেষ পঠনের পর থেকে সংশোধিত) এমএক্সএইচ দ্বারা সমর্থিত নয়।
মিকসের কাছে একটি রেজিপ্যাক্স ম্যাচিং অপারেটর নেই =~। Ksh93 এর এই অপারেটরটি রয়েছে এবং এটি ব্যাশের মতো একই ম্যাচটি সম্পাদন করে তবে এর BASH_REMATCHসাথে মিলে যাওয়া গ্রুপগুলি পুনরুদ্ধার করার সমতুল্য নেই ।
স্ট্রিং অপারেটর
Ksh93 এবং mksh একই স্ট্রিং তুলনা অপারেটর <এবং >বাশ পাশাপাশি এর ==প্রতিশব্দ হিসাবে সমর্থন করে =। মিক্স অভিধান সংক্রান্ত ক্রম নির্ধারণের জন্য স্থানীয় সেটিংস ব্যবহার করে না, এটি স্ট্রিংকে বাইট স্ট্রিংগুলির সাথে তুলনা করে।
অন্যান্য অপারেটর
-v VARকোনও ভেরিয়েবল সংজ্ঞায়িত করা হয়েছে তা পরীক্ষা করতে বাশ-নির্দিষ্ট। যে কোনও পসিক্স শেল, আপনি ব্যবহার করতে পারেন [ -z "${VAR+1}" ]।
ওরফে নামগুলিতে অনুমোদিত অক্ষরের সেটটি সমস্ত শেলের ক্ষেত্রে একই নয়। আমি মনে করি এটি ফাংশনগুলির জন্য একই (উপরে দেখুন)।
Ksh93 এর একটি বিল্টিন নামে পরিচিত builtin, তবে এটি বিল্ট-ইন কমান্ড হিসাবে কোনও নাম কার্যকর করে না। commandএলিয়াস এবং ফাংশনগুলিকে বাইপাস করতে ব্যবহার করুন ; এটি উপস্থিত থাকলে একটি বিল্টিনকে কল করবে, অন্যথায় একটি বাহ্যিক আদেশ (আপনি এটি এড়াতে পারেন PATH= command error_out_if_this_is_not_a_builtin)।
এটি বাশ-নির্দিষ্ট। আপনার সাথে একটি অনুরূপ প্রভাব পেতে পারেন .sh.fun, .sh.fileএবং .sh.linenoksh93 হবে। মিক্সে শেষ আছে LINENO।
declareksh's এর জন্য বাশ-নির্দিষ্ট নাম typeset। ব্যবহার করুন typeset: এটি ব্যাশে কাজ করে।
মিক্স localএকটি উপাধিকার হিসাবে সংজ্ঞা দেয় typeset। Ksh93- এ আপনাকে ব্যবহার করতে হবে typeset(বা একটি উপনাম সংজ্ঞায়িত করতে হবে )।
মিকসের কোনও সহযোগী অ্যারে নেই (এগুলি এখনও অপ্রকাশিত সংস্করণ হিসাবে সজ্জিত রয়েছে)।
আমি মনে করি না যে typeset -tksh এ বাশের (ট্রেস ফাংশন) এর সঠিক সমতুল্য আছে ।
Ksh93 নেই -e।
Ksh93 এবং mksh বাশ-এর মতো বিকল্পগুলি -eএবং -nবিকল্পগুলি প্রক্রিয়া করে । মাকশ আরও বোঝে -E, ksh93 এটিকে বিকল্প হিসাবে বিবেচনা করে না। ব্যাকস্ল্যাশ প্রসারণটি ডিফল্টরূপে ksh93 এ বন্ধ আছে, mksh এ ডিফল্টরূপে।
Ksh বিল্টিন কমান্ডগুলি অক্ষম করার কোনও উপায় সরবরাহ করে না। একটি বিল্টিন এড়ানোর জন্য, বাহ্যিক কমান্ডের পথটি দেখুন এবং এটিকে স্পষ্টভাবে প্রার্থনা করুন।
Ksh93 আছে -aতবে নেই -l। মক্ষেরও নেই।
Ksh93 বা mksh নেই export -n। typeset +x fooপরিবর্তে ব্যবহার করুন, এটি ব্যাশ এবং ksh এ কাজ করে।
Ksh পরিবেশের মাধ্যমে ফাংশন রফতানি করে না।
let বাশ এবং কেএসএ তে একই।
এটি ব্যাশ-নির্দিষ্ট বৈশিষ্ট্য। আপনি while readকোনও ফাইল পড়তে লুপস বা কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন এবং এটিকে লাইনের একটি অ্যারে বিভক্ত করতে পারেন। যত্ন নিন IFSএবং গ্লোববিং করুন। এখানে এর সমতুল্য mapfile -t lines </path/to/file:
IFS=$'\n'; set -f
lines=($(</path/to/file))
unset IFS; set +f
printfখুব অনুরূপ। আমি মনে করি ksh93 বাশের সমস্ত ফর্ম্যাট নির্দেশকে সমর্থন করে। mksh সমর্থন করে না %qবা %(DATE_FORMAT)T; কিছু ইনস্টলেশনে, printfকোনও ম্যাক্স বিল্টিন নয় এবং এর পরিবর্তে বাহ্যিক কমান্ডটি কল করে।
printf -v VAR বাশ-নির্দিষ্ট, ksh সর্বদা স্ট্যান্ডার্ড আউটপুট প্রিন্ট করে।
রিডলাইন সম্পর্কিত সমস্তগুলি সহ বেশ কয়েকটি বিকল্প বাশ-নির্দিষ্ট। অপশন -r, -d, -n, -N, -t, -uব্যাশ, ksh93 এবং mksh মধ্যে অভিন্ন।
আপনি Ksh93 এ কেবল পঠনযোগ্য হিসাবে একই ভেরিয়েবল এবং একই সিনট্যাক্স সহ mksh হিসাবে ঘোষিত করতে পারেন। যদি ভেরিয়েবলটি একটি অ্যারে হয় তবে আপনাকে প্রথমে এটি নির্ধারণ করতে হবে, তারপরে এটিকে কেবল পঠনযোগ্য করে তুলুন readonly VAR। ফাংশনগুলি কেবল ksh এ পঠনযোগ্য করা যায় না।
সমস্ত বিকল্প setএবং set -oএর মধ্যে পসিক্স বা কেএসএস বৈশিষ্ট্য রয়েছে।
shoptবাশ-নির্দিষ্ট অনেকগুলি বিকল্প যেভাবেই ইন্টারেক্টিভ ব্যবহারের বিষয়ে উদ্বেগ প্রকাশ করে। কিছু বিকল্প দ্বারা সক্ষম গ্লোব্বিং এবং অন্যান্য বৈশিষ্ট্যগুলির উপর প্রভাবগুলির জন্য, নীচে বিভাগ "বিকল্পগুলি" দেখুন।
এই রূপটি .ksh তেও বিদ্যমান। বাশ এবং ম্যাক্সে, sourceপরে বর্তমান ডিরেক্টরিটি অনুসন্ধান করে PATHতবে ksh93-তে এটি একটি সমতুল্য সমতুল্য .।
DEBUGসিউডো-সংকেত mksh বাস্তবায়িত হয় না। Ksh93 এ, তথ্য প্রতিবেদন করার বিভিন্ন উপায়ে এটি উপস্থিত রয়েছে, বিশদগুলির জন্য ম্যানুয়ালটি দেখুন।
Ksh এ, এর typeজন্য একটি উপনাম whence -v। মিক্সে, type -pএক্সিকিউটেবলের জন্য পাথ প্রিন্ট করে না, তবে একটি মানব-পঠনযোগ্য বার্তা; whence -p COMMANDপরিবর্তে আপনার প্রয়োজন ।
বিকল্প
shopt -s dotglob - গ্লোববিংয়ে ডট ফাইলগুলি উপেক্ষা করবেন না
dotglobKsh93 এ বিকল্পটি অনুকরণ করতে, আপনি সেট করতে পারেন FIGNORE='@(.|..)'। আমি মনে করি না মিক্সে এর মতো কিছু আছে।
extglobবিকল্প ksh উপর সবসময় কার্যকরভাবে হয়।
shopt -s failglob - যদি কোনও গ্লোব প্যাটার্ন কোনও কিছুর সাথে মেলে না তবে ত্রুটি out
আমি মনে করি না এটি mksh বা ksh93 এর মধ্যে বিদ্যমান। এটা তোলে zsh মধ্যে আছে (ডিফল্ট আচরণ যদি না null_globবা csh_null_globসেট)।
Ksh93 এর সাথে পুনরাবৃত্তিমূলক গ্লোববিং রয়েছে **/, এটি সক্ষম করা হয়েছে set -G। মিক্সের পুনরাবৃত্ত গ্লোববিং নেই।
shopt -s lastpipe - প্যারেন্ট শেলটিতে পাইপলাইনের শেষ কমান্ডটি চালান
Ksh93 সর্বদা প্যারেন্ট শেলের একটি পাইপলাইনের শেষ কমান্ড চালায়, যার জন্য ব্যাশে lastpipeবিকল্প সেট করার প্রয়োজন হয় । মিক্স সর্বদা সাবসিলে পাইপলাইনের সর্বশেষ কমান্ড চালায়।
shopt -s nocaseglob, shopt -s nocasematch- কেস-সংবেদনশীল নিদর্শন
মিকসের কেস-সংবেদনশীল প্যাটার্নের মিল নেই। Ksh93 এটি একটি প্যাটার্ন-বাই-প্যাটার্ন ভিত্তিতে সমর্থন করে: সাথে প্যাটার্নটির উপসর্গ করুন ~(i)।
shopt -s nullglob - নিদর্শনগুলি প্রসারিত করুন যা কোনও ফাইলের সাথে খালি তালিকার সাথে মেলে না
মাকসের কাছে এটি নেই। Ksh93 এটি একটি প্যাটার্ন-বাই-প্যাটার্ন ভিত্তিতে সমর্থন করে: সাথে প্যাটার্নটির উপসর্গ করুন ~(N)।
স্পষ্টতই বেশিরভাগ BASH_xxxভেরিয়েবলের ksh তে বিদ্যমান নেই। $BASHPIDব্যয়বহুল তবে পোর্টেবলের সাথে অনুকরণ করা যেতে পারে sh -c 'echo $PPID'এবং সম্প্রতি ম্যাক্সে যুক্ত করা হয়েছে। BASH_LINEহয় .sh.linenoksh93 এবং LINENOmksh হবে। BASH_SUBSHELLহয় .sh.subshellksh93 হবে।
Mksh এবং ksh93 উভয়ই সূচনা করে যে ফাইলগুলি ENVশুরু হয়।
EUIDএবং UIDksh93 তে বিদ্যমান নেই। মাক্স তাদের ডাকে USER_IDএবং KSH_UID; এটা নেই GROUPS।
FUNCNAMEএবং FUNCNESTksh এ বিদ্যমান নেই। Ksh93 আছে .sh.funএবং .sh.level। ঘোষিত ক্রিয়াকলাপগুলির সাথে function foo { …; }(কোনও বন্ধনী নেই!) এর নিজস্ব নাম রয়েছে $0।
GLOBIGNOREksh93 এ বিদ্যমান তবে একটি আলাদা নাম এবং বাক্য গঠন সহ: এটি বলা হয়ে থাকে FIGNOREএবং এটি একটি একক প্যাটার্ন, কোলন-বিভক্ত তালিকা নয়। একটি @(…|…)প্যাটার্ন ব্যবহার করুন । FIGNOREসম্পূর্ণ আলাদা সিনট্যাক্স সহ Ksh এর সাবমিশম ব্যাশ।
Ksh93 এবং mksh মত কিছুই নেই HOSTTYPE, MACHTYPEএবং OSTYPE। তাছাড়াও SHELLOPTSবা TIMEFORMAT।
মিক্স আছে PIPESTATUS, কিন্তু ksh93 নেই।
মক্ষ এবং ksh93 আছে RANDOM।