यदि आप एक स्ट्रिंग रेगेक्स पैटर्न से मेल खाते हैं, तो यह जांचने के लिए [[ ]]
कि आप रेगुलर एक्सप्रेशन मैच ऑपरेटर के साथ टेस्ट कंस्ट्रक्शन का उपयोग कर सकते हैं =~
।
अपने विशिष्ट मामले के लिए, आप लिख सकते हैं:
[[ $date =~ ^[0-9]{8}$ ]] && echo "yes"
या अधिक सटीक परीक्षण:
[[ $date =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo "yes"
# |^^^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^^^^^ ^^^^^^ |
# | | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ |
# | | | | |
# | | \ | |
# | --year-- --month-- --day-- |
# | either 01...09 either 01..09 end of line
# start of line or 10,11,12 or 10..29
# or 30, 31
यही है, आप बैश में एक regex को परिभाषित कर सकते हैं जो आपके इच्छित प्रारूप से मेल खाता है। इस तरह से आप कर सकते हैं:
[[ $date =~ ^regex$ ]] && echo "matched" || echo "did not match"
जहां आदेशों के बाद &&
क्रियान्वित कर रहे हैं अगर परीक्षण सफल होता है, और आदेश के बाद ||
यदि परीक्षण असफल होने पर क्रियान्वित कर रहे हैं।
ध्यान दें कि यह बैश में यूजर इनपुट डेट फॉर्मेट वेरिफिकेशन में एलेक्स-डैनियल जैकीमेंको द्वारा समाधान पर आधारित है ।
अन्य गोले में आप ग्रीप का उपयोग कर सकते हैं । यदि आपका शेल POSIX अनुपालन है, तो करें
(echo "$date" | grep -Eq ^regex$) && echo "matched" || echo "did not match"
में मछली है, जो POSIX अनुरूप नहीं है, आप कर सकते हैं
echo "$date" | grep -Eq "^regex\$"; and echo "matched"; or echo "did not match"