स्ट्रिंग शैल में तुलना


4

मैं वर्तमान महीने की तुलना करने की कोशिश कर रहा हूं जो मुझे उपयोगकर्ता इनपुट के साथ तारीख उपयोगिता से मिला है। यहां तक ​​कि जब मैं अक्टूबर को इनपुट के रूप में दे रहा हूं तो गलत परिणाम दे रहा है।

read -r month
current=`date +”%b”`
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

मैं समझ नहीं पा रहा हूं कि इसका हमेशा आउटपुट क्यों नहीं दिया जा रहा है। किसी भी मदद की सराहना की है।


1
आप अपनी स्क्रिप्ट बनाने के लिए एक गैर-एससीआई संपादक का उपयोग कर रहे हैं, आपको एक एससी / यूटीएफ 8 पर स्विच करना चाहिए और नियमित उद्धरणों का उपयोग करना चाहिए ( ") और अन्य को नहीं ( )
ओलिवियर दुलैक

जवाबों:


2

अपना कोड चलाकर और Octसंकेत मिलने पर इनपुट करें :

Oct         # this is what you input at the prompt
”Oct”       # this is what your input is compared against
no          # this is the result of the comparison: not true

जाहिर है, अगर आपने ”Oct”तुलना की तो यह सच होगा:

”Oct”
”Oct”
match

यदि आप दो क्लोजिंग डबल कोट्स टाइप नहीं करना चाहते हैं , तो उन्हें तुलना स्ट्रिंग से हटा दें:

read -r month
current=`date +%b`
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

इस तरह, आप बस टाइप कर सकते हैं Octऔर यह मेल खाएगा Oct:

Oct
Oct
match

यदि आप अपने कार्यक्रम को और विकसित करना चाहते हैं, तो अगला कदम तुलनात्मक मामले को असंवेदनशील बनाने का हो सकता है: इस तरह से आपके उपयोगकर्ता टाइप कर सकते हैं oct, Octया OCTउचित मामले की परवाह किए बिना।


2

आपके कोड में एक बहुत स्पष्ट त्रुटि है।

वे तिथि प्रारूप के आसपास उद्धरण चिह्न हैं

current=`date +”%b”`

बनाम

current=`date +"%b"` # this is the one you should be using

इसलिए मुझे तारीख से उद्धरण हटाने और फिर तुलना करने की आवश्यकता है, है ना?
प्रशस्त

3
+1 क्योंकि आपने उद्धरण चिह्नों को संबोधित किया है। हालाँकि मुझे लगता है कि तुलना में कुछ भी गलत नहीं है=
कामिल मैकियोरोस्की

7
[ "$month" = "$current" ]यह पूरी तरह से ठीक है और यकीनन अधिक सही है [ "$month" == "$current" ]क्योंकि पूर्व POSIX है और बाद वाला नहीं है। dash -c '[ a == a ]] && echo yes'उदाहरण के लिए भागो । =बनाम ==एक सी की तरह समस्या यह है, [रों =और ==आमतौर पर जहां दोनों का समर्थन कर रहे बराबर हैं।
मुरु

(अर्घ, मेरे उदाहरण में टाइपो! यह ]]होना चाहिए ]।)
मूरू

2
@ मर्म सही है: उपयोग करें if [ "$month" = "$current" ];। == का उपयोग न करें। समस्या इस तथ्य से आई है कि ओपी ने 2 अतिरिक्त वर्ण जोड़े: $ वर्तमान में, इसलिए 2 तिथियां समान नहीं हो सकती हैं।
ओलिवियर दुलैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.