تحقق مما إذا كانت السلسلة تحتوي على علامة النجمة (*)
سؤال
أريد أن تحقق ما إذا كانت السلسلة تحتوي على واحدة أو أكثر من علامة النجمة.
لقد حاولت هذا:
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 '*'؛ من ثم