مقارنة سلاسل للمساواة في KSH
سؤال
أنا اختبار مع shell script أدناه:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
إنه يعطي هذا الخطأ في حالة:
: ==: unknown test operator
يكون ==
حقا ليس بناء الجملة الصحيح لاستخدامها؟ أنا أركض في سطر الأوامر على النحو التالي
test_lsn_2 INSTANCE=ALL
يمكن لأي شخص أن يقترح حلا. شكرا.
المحلول
أرى أنك تستخدم KSH، لكنك أضفت باش كعلامة، هل تقبل إجابة مرتبطة باش؟ باستخدام Bash يمكنك القيام بذلك بهذه الطرق:
if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]
يرى هنا لمزيد من ذلك.
نصائح أخرى
لمقارنة السلاسل التي تحتاجها واحدة =، وليس مزدوجا. ويجب أن تضعه في اقتباسات مزدوجة في حالة وجود السلسلة فارغة:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
يحاول
if [ "$instance" = "ALL" ]; then
كان هناك العديد من الأخطاء:
تحتاج إلى اقتباسات مزدوجة حول المتغير للحماية من الحالة (من غير المرجح) أنها فارغة. في هذه الحالة، سترى شل
if [ = "ALL" ]; then
التي ليست صالحة.يساوي القشرة تستخدم واحدة
=
(لا توجد طريقة لتعيين قيمة فيif
في قذيفة).
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
أجاب بالفعل على سؤال مماثل. أساسا المشغل الذي تحتاجه هو =
(ليس ==
) وكسر بناء الجملة إذا كان المتغير الخاص بك فارغا (أي يصبح if [ = ALL]
). القي نظرة على الجواب الآخر للتفاصيل.