قيادة الحجة عبر الإنترنت في shell shell

-1

مرحبًا ، لقد كتبت نص برمجي صغير ، ولا يمكنني فهم سلوك هذا النص. يمكن لأي شخص أن يساعدني على فهم هذا النص.

النصي:

#!/bin/bash

if [ -z $1 ]
then
   echo "fail"
else
  echo "success"
fi

أثناء تنفيذ البرنامج النصي.

./test.sh one

إنها تحذف العبارة الأخرى بدلاً من العبارة الرئيسية ، على الرغم من أنها اجتازت الحجة.

يمكن لأي شخص أن يشرح لي هذا السلوك لفهمه

1 إجابة

4
افضل جواب

ال -z يتحقق الاختبار في bash ما إذا كانت السلسلة قيمة فارغة (طول صفري).

بما أنك تمرر حجة إلى البرنامج النصي $1 ليست فارغة وبالتالي -z $1 يقيم ل false ، تنفيذ else جزء من البرنامج النصي الخاص بك.

ملاحظة جانبية: بما أنك تعمل مع سلاسل ، أوصيك باقتباس المتغيرات على النحو التالي:

if [ -z "$1" ]; then
    echo "String is empty / No argument given"
else
    echo "String is not empty / Argument given"
fi

تحرير: كما أشار user1934428 فمن الأفضل استخدامه [[ بدلا من [ . هذا ، من بين أمور أخرى ، يلغي الحاجة إلى الاقتباس. شاهد المزيد من الاختلافات هنا .

if [[ -z $1 ]]; then
    ...

ومع ذلك ، انتبه إلى أن هذا امتداد باش ولن يعمل في النصوص البرمجية.

:مؤلف
فوق
قائمة طعام