2010-11-02 16 views
13

के साथ स्ट्रिंग शुरू होती है, तो मुझे यह जांचने की आवश्यकता है कि चर के पास स्ट्रिंग का मान है जो निर्दिष्ट सबस्ट्रिंग के साथ शुरू होता है।केएसएच जांचें कि स्ट्रिंग

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

सबसे स्पष्ट रास्ता सबस्ट्रिंग bar साथ $foo शुरू होता है strig कि क्या KSH में जांच करने के लिए क्या है:

अजगर में यह कुछ इस तरह हो सकता है?

उत्तर

23

यह बहुत आसान है लेकिन थोड़ा अजीब लग रहा है:

if [[ "$foo" == abc* ]]; then ... 

एक यह है कि ksh ग्रहण करेंगे मौजूदा निर्देशिका में फ़ाइलों के साथ पैटर्न का विस्तार होगा, लेकिन इसके बजाय, यह पैटर्न मिलान करता है। हालांकि, आपको [[ की आवश्यकता है। एकल [ काम नहीं करेगा। foo में कोई रिक्त स्थान नहीं होने पर उद्धरण सख्ती से जरूरी नहीं हैं। और अधिक जटिल पैटर्न के लिए

if [[ $foo =~ ^abc ]] 

, मैं एक चर का उपयोग करना चाहिये बजाय परीक्षा में सीधे पैटर्न डाल:

+0

डबल ब्रैकेट के अंदर, आपको उद्धरण की आवश्यकता नहीं है, भले ही '$ foo' शून्य या अनसेट हो। –

+0

समाधान ठीक वैसे ही दिखता है जो मैं ढूंढ रहा था। लेकिन दुर्भाग्य से यह मेरे क्ष में काम नहीं करता है। यह ksh88 की तरह दिखता है, मुझे लगता है कि इस तरह के चाल के लिए बहुत पुराना है। – z4y4ts

+0

क्या होगा यदि '$ foo' में" = "है? – user443854

6

तुम भी रेगुलर एक्सप्रेशन मिलान कर सकते हैं

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

इसके अलावा:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

+1 आपको निश्चित रूप से अंतरिम चर की आवश्यकता नहीं है। 'एबीसी' में मामला $ foo *) हां गूंज ;; esac' –

+1

के लिए – tripleee

+1

पोर्टेबल वापस सौरलिस 9/बिन/sh और पोर्टेबल के ऊपर काम करता है – lamont

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