বাশকে যখন নামের সাথে ডাকা হয় sh, এটি এটি করে :
if (shell_name[0] == 's' && shell_name[1] == 'h' && shell_name[2] == '\0')
act_like_sh++;
এবং এরপরে শেল ভেরিয়েবলটি এতে সেট করেPOSIXLY_CORRECTy :
if (act_like_sh)
{
bind_variable ("POSIXLY_CORRECT", "y", 0);
sv_strict_posix ("POSIXLY_CORRECT");
}
bind_variableকলগুলি bind_variable_internal, যা, যদি সেই সময়ে শেল বৈশিষ্ট্যটি aচালু থাকে (এটি যদি আপনি শেলটি দিয়েছিলেন তবে এটিটি -a) রফতানি হিসাবে শেল পরিবর্তনশীল চিহ্নিত করে ।
সুতরাং আপনার প্রথম স্ক্রিপ্টে:
#!/bin/sh -a
echo "a" | sed -e 's/[\d001-\d008]//g'
sedএটি POSIXLY_CORRECT=yএর পরিবেশে যুক্ত হয়, যা এটি সম্পর্কে অভিযোগ করবে [\d001-\d008]। (সেড --posixঅপশন দেওয়া থাকলে একই জিনিস ঘটে ))
গনুহ sed সালে চরিত্র যার সংখ্যাগত মান একটি পালাবার কোড 10-ভিত্তিক হয় NNN কিন্তু POSIX মোডে, এই একটি বন্ধনী অভিব্যক্তি ভিতরে অক্ষম করা হয়েছে তাই হয়, মানে আক্ষরিক অক্ষর, , ইত্যাদি পরিসীমা থেকে হচ্ছে to । অক্ষর কোডের ক্রম হিসাবে, এর আগে আসে (এবং পরিসীমা শূন্য ব্যতীত সমস্ত অঙ্ক সহ প্লাস সমস্ত বড় হাতের অক্ষর এবং কিছু বিশেষ অক্ষর অন্তর্ভুক্ত)। আপনি যে লোকেলটি ব্যবহার করছিলেন সেগুলিতে এর আগে বাছাই করুন , তাই এই সীমাটি অবৈধ।\dNNN[\d001-\d008]\d1\1\en_US.UTF-8\1
আপনার দ্বিতীয় স্ক্রিপ্টে:
#!/bin/sh
set -a
echo "a" | sed -e 's/[\d001-\d008]//g'
POSIXLY_CORRECTশেলটিতে সেট করা সত্ত্বেও এটি রফতানি করা হয় না, সুতরাং POSIXLY_CORRECTপরিবেশে ছাড়াই সেড আহ্বান করা হয় , এবং সেড জিএনইউ এক্সটেনশনের সাহায্যে চালিত হয়।
যদি আপনি export POSIXLY_CORRECTআপনার দ্বিতীয় স্ক্রিপ্টের শীর্ষের নিকটে যোগ করেন তবে আপনি অভিযোগও দেখতে পাবেন।
shহয় না। না সমস্ত সেড সমতুল্য। আপনি কোনটিshব্যবহার করছেন? কোন ওএসে? এবং কোন সেড (সম্ভবত?sed --versionযদি এটি ব্যর্থ না হয়)?