تحقق مما إذا كانت السلسلة تحتوي على علامة النجمة (*)

StackOverflow https://stackoverflow.com/questions/1193658

  •  19-09-2019
  •  | 
  •  

سؤال

أريد أن تحقق ما إذا كانت السلسلة تحتوي على واحدة أو أكثر من علامة النجمة.

لقد حاولت هذا:

if [[ $date_alarm =~ .*\*.* ]]
then
    ...
fi

عملت عند تشغيل البرنامج النصي مباشرة، ولكن ليس إذا تم استدعاء هذا البرنامج النصي أثناء الإغلاق (البرنامج النصي مثبتا في مستوى التشغيل 0 و 6 عبر Update-Rc.D)

أي فكرة، اقتراح؟

شكرًا

هل كانت مفيدة؟

المحلول

دائما اقتباس سلاسل.

للتحقق مما إذا كانت السلسلة $ Date_alarm تحتوي على علامة نجمية، يمكنك القيام به:

إذا صدى X "$ date_alarm" | Grep '*'> / dev / null؛ ثم ... فاي.

نصائح أخرى

expr "$date_alarm" : ".*\*.*"
case "$date_alarm" in
*\**)
  ...
  break
  ;;
*)
  # else part
  ...
  ;;
esac

بناء الجملة هو، حسنا، / بن / ش، لكنه يعمل.

ماذا يحدث إذا استبدلت

if [[ $date_alarm =~ .*\*.* ]]

مع

if [[ "$date_alarm" =~ .*\*.* ]]

قد ترغب أيضا في تجربة:

if [[ "$date_alarm" =~ '\*+' ]]

لست متأكد بشأن ذلك...

مع تحياتي

if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)'
then
    ...
fi

أخيراً

if echo x"$date_alarm" | grep '*' > /dev/null; then

هل خدعت

شيء غريب = ~.*. لا يعمل فقط في سياق INIT أثناء الإغلاق، ولكن العمل بشكل مثالي إذا كان الإطلاق في سياق باش ....

لا حاجة لإعادة توجيه Stdout مثل الآخرين القيام به. استخدم خيار -q من GREP بدلا من ذلك:

إذا صدى X "$ date_alarm" | grep -q '*'؛ من ثم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top