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


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.