मैंने आज एक छोटी स्क्रिप्ट लिखी थी जिसमें निहित था
grep -q ^local0 /etc/syslog.conf
समीक्षा के दौरान, एक सहकर्मी ने सुझाव दिया कि ^local0
उद्धृत किया जाए क्योंकि ^
बोर्न शेल में "पाइप" है। इस दावे से आश्चर्यचकित, मैंने इसका उल्लेख करने वाले किसी भी संदर्भ को ट्रैक करने का प्रयास किया। इंटरनेट पर मुझे कुछ भी नहीं मिला यह सुझाव एक समस्या थी।
हालांकि, यह पता चला है कि bsh
AIX 7 पर (जो बोर्न शेल होने का दावा करता है) का कार्यान्वयन वास्तव में यह व्यवहार है:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
अन्य "बॉर्न शेल" कार्यान्वयनों में से कोई भी मैंने इस तरह से व्यवहार करने की कोशिश की (जो कि, ^
शेल मेटाचैकर को बिल्कुल नहीं माना जाता है)। मैंने sh
CentOS (जो वास्तव में बैश है), और sh
FreeBSD (जो बैश नहीं है) पर कोशिश की। मेरे पास कोशिश करने के लिए कई अन्य प्रणालियाँ नहीं हैं।
क्या यह व्यवहार अपेक्षित है? कौन से गोले ^
को पाइप मेटाचैकर मानते हैं ?
[ x"$foo" = x"bar" ]
।
bsh
यह बॉर्न शेल नहीं है। केवल AIX पर बॉर्न शेल के लिए नाम का दुरुपयोग किया जाता है। bsh
बल्कि 1984 में मेरे द्वारा HOSBerhold AG पर UNOS (पहला UNIX क्लोन) में पेश किया गया एक खोल है। ध्यान दें कि AIX 1984 में अस्तित्व में नहीं था।
^
zsh और regex अंतरिक्ष में भी एक नकारात्मक चरित्र है। एक अलग टिप्पणी के रूप में, आमतौर पर गोले में पोर्टेबिलिटी के लिए grep अभिव्यक्ति में एकल उद्धरण का उपयोग करने की सलाह दी जाती है।