পসিক্স পরীক্ষা এবং -এ


9

আমি চেকব্যাশিজম সহ আমার একটি স্ক্রিপ্ট পরীক্ষা করেছিলাম এবং আমি নিম্নলিখিত সতর্কতা পেয়েছি:

possible bashism in check_ssl_cert line 821 (test -a/-o):
if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then

ইন POSIX চশমা বিভাগে 4.62.4 আমি খুঁজে

প্রাথমিক - একটি প্রাথমিক একটি বাইনারি সঞ্চালন করে এবং প্রাথমিক এবং প্রাথমিকের ফলাফলগুলি। -O অপারেটরের চেয়ে-অপারেটরের চেয়ে অগ্রাধিকার রয়েছে।

কেন -aএবং -oবহনযোগ্য নয় বলে বিবেচিত হয় ?

উত্তর:


11

এটি এতদূর নয় যে এটি পোর্টেবল নয়, তবে [4 টিরও বেশি আর্গুমেন্ট পাস করার সময় এটি নির্ভরযোগ্য যেখানে কার্যকর হয় না ।

এমনকি ব্যাশে:

$ ALTNAMES='='  bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]'
bash: line 0: [: too many arguments

সম্পর্কিত বিভাগে বলা হয়েছে:

> 4 টি যুক্তি :

ফলাফলগুলি অনির্ধারিত।

[ওবি এক্সএসআই] [অপশন স্টার্ট] এক্সএসআই-কনফর্মেন্ট সিস্টেমগুলিতে, প্রাইমারি এবং অপারেটরগুলির সংমিশ্রণগুলি পূর্বে বর্ণিত নজির এবং সহযোগীতা বিধিগুলি ব্যবহার করে মূল্যায়ন করা হবে। তদতিরিক্ত, স্ট্রিং তুলনা বাইনারি প্রাইমারী '=' এবং "! =" এর কোনও ইউনিারি প্রাথমিকের চেয়ে উচ্চতর অগ্রাধিকার থাকবে। [বিকল্প শেষ]

-aএবং -oনিষিদ্ধ করা উচিত। এর পরিবর্তে &&এবং || শেল অপারেটরগুলি ব্যবহার করা সঠিক উপায় :

if [ -n "$foo" ] && [ -n "$bar" ]; then

এমনকি আমি এটি আরও সুস্পষ্ট বলে মনে করি।


ধন্যবাদ, সুতরাং একমাত্র সমাধান দুটি পরীক্ষা করা হবে? `যদি [-n" $ {ALTNAMES} "] && [-n" $ MM COMMON_NAME}];
মাত্তেও

3
না শুধুমাত্র কিন্তু এক অবশ্যই ভাল এবং জন্য একটি প্রতিস্থাপন হিসাবে সুপারিশ -aএবং-o
Stéphane Chazelas

ওকে অনেক ধন্যবাদ (কেবলমাত্র আমি বোঝাতে চেয়েছিলাম যে একক পরীক্ষা করার কোনও উপায় নেই ...)।
মাত্তেও

1
হ্যাঁ, আপনি করতে পারেন [ "x$ALTNAMES" != x -a "x$COMMON_NAME" != x ](পসিক্স অনুযায়ী এখনও অনির্ধারিত তবে পোর্টেবল এবং নির্ভরযোগ্য), বা[ "${ALTNAMES:+x}${COMMON_NAME:+x}" = xx ]
স্টাফেন চ্যাজেলাস

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