শেল মেটাচার্যাক্টর হিসাবে ^ ব্যবহার করুন


19

আমি আজ একটি ছোট স্ক্রিপ্ট লিখেছিলাম যা এতে রয়েছে

grep -q ^local0 /etc/syslog.conf

পর্যালোচনা চলাকালীন, একজন সহকর্মী পরামর্শ দিয়েছিলেন যে ^local0উদ্ধৃত করা হবে কারণ ^বোর্ন শেলটির অর্থ "পাইপ"। এই দাবির দ্বারা অবাক হয়ে, আমি যে উল্লেখটি উল্লেখ করেছি তা ট্র্যাক করার চেষ্টা করেছি। ইন্টারনেটে আমার যে কিছুই পাওয়া যায় নি প্রস্তাবিত এটি একটি সমস্যা।

তবে, দেখা যাচ্ছে যে bshএআইএক্স 7 এ বাস্তবায়ন (যা বোর্ন শেল হিসাবে দাবি করেছে) বাস্তবায়নের এই আচরণটি রয়েছে:

> bsh
$ ls ^ wc
      23      23     183
$ ls | wc
      23      23     183

অন্যান্য "বোর্ন শেল" বাস্তবায়ন করার চেষ্টা করে আমি এর সাথে আচরণ করার চেষ্টা করি নি (এটি ^মোটেই শেল মেটাচার্যাক্টর হিসাবে বিবেচিত হয় না)। আমি shসেন্টোস (যা সত্যই বাশ) এবং shফ্রিবিএসডি (যা বাশ নয়) এ চেষ্টা করেছি। আমার কাছে চেষ্টা করার মতো আরও অনেক সিস্টেম নেই।

এই আচরণ কি প্রত্যাশিত? কোন শেলগুলি ^পাইপ মেটাচার্যাক্টর হিসাবে বিবেচনা করে?


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

বোর্ন শেলটিতে প্রচুর অদ্ভুত আচরণ ছিল যা আমরা এখনও আধুনিক শেল কোডের জন্য কাজের আশপাশে দেখতে পাই [ x"$foo" = x"bar" ]
jordanm

bshএটা বোর্ন শেল নয়। নামটি শুধুমাত্র এআইএক্সে বোর্ন শেলের জন্য আপত্তিজনক। bshবরং 1984 সালে এইচ.বার্গোল্ড এজি-তে ইউএনওএসের (প্রথম ইউএনআইএক্স ক্লোন) আমার দ্বারা প্রবর্তিত শেল। দ্রষ্টব্য যে
এআইএক্স

উত্তর:


21

^এর সমার্থক হিসেবে চরিত্র |তারিখ থেকে ফিরে থম্পসন শেল । এগুলি একই সময়ে ইউনিক্স ভি 4 এ প্রবর্তিত হয়েছিল এবং ম্যান পৃষ্ঠায় একসাথে উল্লেখ করা হয়েছে । সোভেন মাসচেখ উল্লেখ করেছেন যে ^কেবলমাত্র প্রাথমিক পর্যায়ে কেবলমাত্র টার্মিনালগুলিতে সুবিধার কারণেই "সম্ভবত [পরিচয়] হয়েছিল" যেখানে টাইপিং |ছিল "কিছুটা ব্যথা"

থম্পসন শেলটি দীর্ঘ চলে গেছে, তবে এর উত্তরসূরী বোর্ন শেল একই বাক্য গঠন বজায় রেখেছে (যদিও এর ম্যান পেজটিতে কেবল উল্লেখ করা হয়েছে |)।

অ্যাশ, বাশ এবং কেএস এর মতো উত্তরসূরি শেলগুলি কেবল |পাইপ চরিত্র হিসাবে বোঝে । আপনি ওপেন সোর্স ইউনিক্স ভেরিয়েন্টগুলিতে একটি আসল বোর্ন শেলটি সন্ধান করতে যাচ্ছেন না কারণ দীর্ঘদিন ধরে বোর্ন শেলটির কোনও মুক্ত উত্স প্রকাশ হয়নি release (আমি মনে করি ওপেনসোলারিসের মধ্যে একটি অন্তর্ভুক্ত ছিল, তবে এটি অন্য কোথাও গৃহীত হয়নি কারণ ততক্ষণে এটি নতুন বাস্তবায়নের দ্বারা দীর্ঘকাল অচল হয়ে পড়েছিল)।

একক ইউনিক্স স্পেসিফিকেশন উল্লেখ না ^একটি বিশেষ অক্ষর, যা কার্যকরভাবে এর মানে হল যে POSIX শাঁস ব্যাখ্যা করা উচিত এটা literally¹ হিসাবে। আমি মনে করি না যে বোর্ন শেলের কোনও সম্পূর্ণ পসিক্স-কমপ্লায়েন্ট বৈকল্পিক হয়েছে (কেবলমাত্র স্বাধীন বাস্তবায়ন)।

^বিকল্পটি extendedglobসক্ষম থাকলে zsh এ বিশেষ , তবে এর sh সামঞ্জস্যতা মোডে নয়। এর ডিফল্ট মোডে, এটি পসিক্স থেকে বিভিন্ন উপায়ে বিচ্যুত হয়।

আমি ^স্বচ্ছতার জন্য যাইহোক নিয়মিত অভিব্যক্তিতে উদ্ধৃতি দেওয়ার পরামর্শ দিচ্ছি । এতে কোনও চরিত্রের উপস্থিতি নির্বিশেষে কোনও স্ক্রিপ্টে নিয়মিত ভাব প্রকাশ করুন।

A একটি ওয়াইল্ডকার্ড প্যাটার্নে বন্ধনী প্রকাশের প্রথম অক্ষর ব্যতীত যেখানে !স্ট্যান্ডার্ড নেগ্রেশন চরিত্রটি রয়েছে তবে বাস্তবায়নগুলিও ^একইভাবে ব্যাখ্যা করতে পারে ।


ধন্যবাদ, 2003 এর পুরো টিইউএইচএস থ্রেডটি আলোকিত করেছিল।
গ্রেগ হিউগিল

সম্পূর্ণতার জন্য, আপনি উল্লেখ করতে চাইতে পারেন ^এটি বিশেষ fishযেখানে এটি একটি পুনর্নির্দেশ অপারেটর, rc/ esযেখানে এটি একটি কনটেন্টেশন অপারেটর , বা csh / tcsh / bash / zsh হ'ল কমান্ড লাইনের প্রথম চরিত্রের ক্ষেত্রে expansion
স্টাফেন চেজেলাস

3

এটি প্রমাণিত হয়েছে যে এটি SVR 4.2 শেলের ^একটি অননুমোদিত বৈশিষ্ট্য বলে মনে হচ্ছে । বোর্ন শেল থেকে জিএনইউ ব্যাশ পরিশিষ্ট বি থেকে প্রধান পার্থক্য :

  • SVR4.2 শেলটি ‘^’অননুমোদিত সমতুল্য হিসাবে বিবেচনা করে ‘|’

3

হ্যাঁ, ওপেনসোলারিসে বোর্ন শেল উত্স অন্তর্ভুক্ত রয়েছে তবে সেই উত্সটি বহনযোগ্য নয়।

একজন বজায় রেখেছে এবং বোর্ন শেল উৎস অত্যন্ত পোর্টেবল ভার্সন পাওয়া যাবে এখানে মধ্যে schily-*.tar.bz2আর্কাইভ।

উত্স সম্পর্কিত অংশ এখানে cmd.c:

/* 
* ^ is a relic from the days of UPPER CASE ONLY tty model 33s 
*/ 
if ((t = item(TRUE)) != 0 && (wdval == '^' || wdval == '|')) 

আপনি দেখুন, এটি কোনও নির্দিষ্ট শেলের সাথে সম্পর্কিত নয় (উদাঃ থম্পসন শেল) তবে সত্য যে ১৯ 1970০ এর দশকে এখনও কেবল প্রায় বড় আকারের টার্মিনাল ছিল।

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