বাশ-এ, যদি [-z "$ 1"] হয় এবং ["$ 1" = ""] কি একই?


28

বাশ শেল স্ক্রিপ্টিং এ, নিম্নলিখিত দুটি বিবৃতি মধ্যে পার্থক্য (যদি থাকে)?

    1.) if [ -z "$1" ]
    ২) if [ "$1" = "" ]

আমি নিজেকে কিছু স্ক্রিপ্টে দ্বিতীয়টি লিখতে দেখেছি, তবে তারপরে আমি এখানে পড়েছি যে -zব্যবহারটি একই জিনিসটি অর্জন করে।

দ্বিতীয়টি ব্যবহার করতে যদি সমস্যা হয়, তবে প্রথমটি কিছুটা ভাল দেখায় আমাদের কি এড়ানো উচিত?


3
বিস্তারিত তুলনার জন্য, স্ট্যাক ওভারফ্লোতে আমার উত্তর দেখুন । এছাড়াও, এই এবং এই দেখুন
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

কিছু সুন্দর উত্তরের সাথে চমৎকার লিঙ্কগুলি :)
জোহান

উত্তর:


36

[ "$1" = "" ]এবং [ -z "$1" ]ব্যাশ এবং অন্যান্য পসিক্স-কমপ্লায়েন্ট শেলগুলির মধ্যে ঠিক সমান। (দ্রষ্টব্য যে বন্ধনীগুলির প্রতিটি পাশের মধ্যে অবশ্যই একটি স্পেস থাকতে হবে, যদি না শব্দ-উপাদানগুলির মতো অক্ষর থাকে ;))

[অন্যের মতো অন্তর্নির্মিত শেল; প্রকৃতপক্ষে এটিও বানান করা যেতে পারে test( উভয়ের মধ্যে একমাত্র পার্থক্য হ'ল এটি সর্বশেষ যুক্তি হিসাবে [প্রয়োজন ])। তাই আপনি যদি চালানো [ "$1" = "" ]সঙ্গে $1বিস্তৃত -z: পরীক্ষা অপারেটর তিনটি আর্গুমেন্ট দেখেন -z, =এবং খালি স্ট্রিং। কিছু পুরানো বোর্ন শেল কখনও কখনও কোনও অপারেন্ডকে অপারেটরের মতো দেখতে এলে পার্স ত্রুটি ছুঁড়ে দেয়, এমনকি যদি সম্পূর্ণ এক্সপ্রেশনটিতে অস্পষ্টতা না থাকে। আমি জানি না যে কোনও সংস্করণে এই বিশেষ অভিব্যক্তিটি আসলেই সমস্যা ছিল কিনা, তবে আরও জটিল এক্সপ্রেশনগুলি এগুলি ফেলে দিতে পারে। এমন সংস্করণও থাকতে পারে যা খালি শব্দের সাথে সমস্যাযুক্ত ছিল; এগুলিও সমর্থন করত না [ -z "$1" ]। একটি সাধারণ শেল আইডিয়ম হয়[ x"$1" = x"" ]। অপারেটরদের অপারেটর হিসাবে পার্স করার কোনও ঝুঁকি এড়ানো যায় কারণ কোনও অপারেটর চিঠি দিয়ে শুরু করে না।

Ksh, bash এবং zsh এ, আপনি ডাবল বন্ধনী বাক্য গঠন ব্যবহার করতে পারেন [[ -z $1 ]],। এই নতুন সিনট্যাক্সটি (এটি ১৯ 1970০-এর দশকের মাঝামাঝির চেয়ে 1980 এর দশকের শেষের দিকের) একটি সাধারণ অন্তর্নির্মিত না করে একটি বিশেষ সিনট্যাকটিক কনস্ট্রাক্ট ব্যবহার করে অপারেটর হিসাবে পার্সড হওয়ার ঝুঁকি দূর করে। অপারেটরগুলি অবশ্যই আক্ষরিকভাবে উপস্থিত হবে, ডাবল বন্ধনীগুলির মধ্যে অনুপযুক্ত, এবং আপনার ভেরিয়েবল বিস্তৃতি দ্বিগুণ করার দরকার নেই।


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