[linux] كيف تقارن السلاسل في باش



Answers

أو إذا لم تكن بحاجة إلى شرط آخر:

[ "$x" == "valid" ] && echo "x has the value 'valid'"
Question

كيف أقوم بمقارنة متغير بسلسلة (ونفعل شيئًا إذا كان مطابقاً)؟




a="abc"
b="def"

# Equality Comparison
if [ "$a" == "$b" ]; then
    echo "Strings match"
else
    echo "Strings don't match"
fi

# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
    echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
    echo "$b is lexicographically smaller than $a"
else
    echo "Strings are equal"
fi

ملاحظات:

  1. المسافات بين if و [ and ] مهمة
  2. > و < مشغلات إعادة التوجيه حتى يفرغها مع \> و \< على التوالي للسلاسل.



ربما أستخدم تطابقات regexp إذا كان الإدخال يحتوي على عدد قليل من الإدخالات الصالحة. على سبيل المثال فقط "البداية" و "توقف" هي إجراءات صالحة.

if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
  echo "valid action"
fi

لاحظ أن أحفظ المتغير $ACTION باستخدام الفاصلة المزدوجة. لاحظ أيضًا أن هذا لن يعمل على إصدارات باش قديمة جدًا.




لا بد لي من عدم الموافقة على أحد التعليقات في نقطة واحدة:

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

لا ، هذا ليس أونيلينيير مجنون

انها مجرد يبدو وكأنه واحد ل ، هم ، غير مطلقة ...

ويستخدم الأنماط الشائعة كلغة ، بطريقة ما ؛

و fter تعلمت اللغة.

في الواقع ، من الجميل أن تقرأ

إنه تعبير منطقي بسيط ، مع جزء خاص واحد: التقييم البطيء لمشغلي المنطق.

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

كل جزء هو تعبير منطقي. الأولى قد تكون صحيحة أو خاطئة ، والاثنان الآخران دائمًا صحيحان.

(
[ "$x" == "valid" ] 
&&
echo "valid"
)
||
echo "invalid"

الآن ، عندما يتم تقييمها ، يتم فحص الأول. إذا كانت خاطئة ، من المعامل الثاني للمنطق و && بعد أن لا تكون ذات صلة. الأولى ليست صحيحة ، لذلك لا يمكن أن يكون الأول والثاني صحيح ، على أي حال.
الآن ، في هذه الحالة هو الجانب الأول من المنطق أو || زائف ، ولكن يمكن أن يكون صحيحًا إذا كان الجانب الآخر - الجزء الثالث - صحيحًا.

لذلك سيتم تقييم الجزء الثالث - بشكل أساسي كتابة الرسالة كأثر جانبي. (لديها النتيجة 0 لصحيح ، والتي لا نستخدمها هنا)

الحالات الأخرى متشابهة ، ولكنها أبسط - وأعدك! هي - يمكن أن تكون - سهلة القراءة!
(ليس لدي واحد ، ولكن أعتقد أن كونه أحد محاربي UNIX ذوي اللحية الرمادية يساعد كثيراً في هذا.)




Related