2009-07-28 15 views
5

है, मैं यह जांचना चाहता हूं कि मेरी स्ट्रिंग में एक या अधिक तारांकन है या नहीं।जांचें कि क्या स्ट्रिंग में एस्टेरisk (*)

मैं कोशिश की है इस:

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

यह काम किया जब मैं सीधे स्क्रिप्ट लॉन्च करते हैं, लेकिन इस स्क्रिप्ट बंद (स्क्रिप्ट अद्यतन-rc.d के माध्यम से चलाने के स्तर 0 और 6 में स्थापित) के दौरान कहा जाता है नहीं तो

कोई विचार, सुझाव?

धन्यवाद

+1

मेरा अनुमान है कि आपकी init प्रणाली एक दुभाषिया के रूप में '/ bin/bash' का उपयोग नहीं करती है, इसके बजाय यह'/bin/sh' का उपयोग करेगी। –

+0

यदि विलियम का उत्तर काम करता है, तो "उत्तर स्वीकार करें" बटन पर क्लिक करना न भूलें! – dbr

उत्तर

2

हमेशा तारों को उद्धृत करें। यदि स्ट्रिंग $ date_alarm एक तारक शामिल

जाँच करने के लिए आप कर सकते हैं:

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

बहुत अच्छा काम करता है – voidAndAny

0

तुम क्या की जगह होता, तो

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

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

साथ आप भी चाहते हो सकता है कोशिश करने के लिए:

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

सुनिश्चित करें कि एक के बारे में नहीं ...

संबंध

+0

यदि [["$ date_alarm" = ~। * \ *। *]] काम न करें, लेकिन जैसा कि मैंने कहा कि अजीब बात यह है कि यह केवल init संदर्भ में काम नहीं करता है बंद अगर [[ "$ date_alarm" = ~ '\ * +']] परीक्षण नहीं tahnks – voidAndAny

+0

उद्धरण पैटर्न: यदि [[ "$ date_alarm" = ~] "* \ * *।।"] – bstpierre

0
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' 
then 
    ... 
fi 
1
case "$date_alarm" in 
*\**) 
    ... 
    break 
    ;; 
*) 
    # else part 
    ... 
    ;; 
esac 

वाक्य रचना है, ठीक है,/bin/श, लेकिन यह काम करता है।

0

अंत में

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

चाल

अजीब काम किया = ~। *। शटडाउन के दौरान init संदर्भ में ही काम नहीं है, लेकिन पूरी तरह से काम करता है, तो stdout अनुप्रेषित करने बैश संदर्भ में लांच ....

+0

जीआरपी जैसे बाहरी कार्यक्रम को कॉल करने की आवश्यकता नहीं है जो आप चाहते हैं। बैश में, केस स्टेटमेंट पर्याप्त होना चाहिए। – ghostdog74

2
expr "$date_alarm" : ".*\*.*" 
+1

थोड़ा सा स्पष्टीकरण अच्छा होगा;) – MUG4N

0

कोई ज़रूरत नहीं दूसरों की तरह। इसके बजाए grep के -q विकल्प का उपयोग करें:

यदि echo x "$ date_alarm" है। grep -q '*'; तो

संबंधित मुद्दे