বাশকে যখন নামের সাথে ডাকা হয় sh
, এটি এটি করে :
if (shell_name[0] == 's' && shell_name[1] == 'h' && shell_name[2] == '\0')
act_like_sh++;
এবং এরপরে শেল ভেরিয়েবলটি এতে সেট করেPOSIXLY_CORRECT
y
:
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]
\
d
1
\
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
যদি এটি ব্যর্থ না হয়)?