2010-11-09 10 views
19

एक निश्चित उपसर्ग लंबाई मैं यह इतना की तरह कर सकते हैं के लिए:परीक्षण कैसे करें कि एक चर एक स्ट्रिंग के साथ शुरू होता है?

[ a${filename:0:2} = a.# ] && echo temporary emacs file 

कैसे एक मनमाना उपसर्ग के लिए यह करने के लिए?

क्या कोई क्लीनर तरीका है?

+0

संभावित डुप्लिकेट [बैश में, मैं कैसे जांच सकता हूं कि स्ट्रिंग कुछ मूल्य से शुरू होती है?] (Http://stackoverflow.com/questions/2172352/in-bash-how-can-i-check- अगर-ए-स्ट्रिंग-शुरू-कुछ-मूल्य के साथ) – tripleee

उत्तर

32

[[ का = ऑपरेटर दाएं ऑपरेंड में एक पैटर्न लेता है।

var=123 
[[ 1234 = $var* ]] && ... 
+0

क्या आपका मतलब है '[[$ {var_to_test} a = $ {prefix} * a]] && ... '? – thomas

+2

आपको अंत में 'ए' की आवश्यकता नहीं है; '[[' '' 'के समान सीमाएं नहीं हैं। –

+0

आप सही हैं। यदि बाईं तरफ एक चर है, तो यह अभिव्यक्ति खाली होने पर भी काम करता है (मैं उलझन में था क्योंकि मैंने इसे lhs पर किसी भी नाम के बिना खोल में परीक्षण किया है, इसलिए यह वाक्यविन्यास त्रुटियों का उत्पादन करेगा, लेकिन एक में लिपि हमेशा कुछ परिवर्तनीय नाम होगा।) – thomas

18

यहाँ 'regex' संस्करण (2015, बैश 3.x और नवीन) इग्नेसियो के जवाब की, ऑपरेटर =~ का उपयोग कर:

[[ "1234" =~ ^12 ]] && echo y 

आप एक चर से एक गतिशील उपसर्ग की जरूरत है:

var=12 
[[ "1234" =~ ^$var ]] && echo y 

जब जटिल नियमित अभिव्यक्ति का उपयोग कर आप उन्हें एक स्वयं के चर में जगह कर सकते हैं:

var=12 
var2=a 
regex="^${var}.+${var2}.+$" 
[[ "1234a567" =~ $regex ]] && echo y 

आदेश [[ पर भी 'Conditional Constructs' section of the Bash man page देखें:

एक अतिरिक्त द्विआधारी ऑपरेटर, = ~, उपलब्ध, == और के रूप में ही पूर्वता साथ है =। जब इसका उपयोग किया जाता है, ऑपरेटर के दाईं ओर की स्ट्रिंग को एक विस्तारित नियमित अभिव्यक्ति माना जाता है और तदनुसार मिलान किया जाता है (जैसा कि रेगेक्स (3) में होता है)। स्ट्रिंग मान 0 है यदि स्ट्रिंग पैटर्न से मेल खाता है, और 1 अन्यथा। यदि नियमित अभिव्यक्ति वाक्य रचनात्मक रूप से गलत है, तो सशर्त अभिव्यक्ति का वापसी मान 2 है। यदि खोल विकल्प nocasematch सक्षम है, तो मिलान वर्णमाला वर्णों के मामले के बिना किया जाता है। नियमित अभिव्यक्ति के भीतर संश्लेषित उप-अभिव्यक्तियों से मेल खाने वाले सबस्ट्रिंग सरणी चर BASH_REMATCH में सहेजे जाते हैं। इंडेक्स 0 के साथ BASH_REMATCH का तत्व स्ट्रिंग का हिस्सा है जो पूरे नियमित अभिव्यक्ति से मेल खाता है। इंडेक्स एन के साथ BASH_REMATCH का तत्व nth संश्लेषित उप-संपीड़न से मेल खाने वाली स्ट्रिंग का हिस्सा है।

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