2011-11-05 11 views
6

में स्ट्रिंग तुलना मैं बैश स्क्रिप्ट का अध्ययन कर रहा हूं। मुझे वेब से नीचे नमूना स्क्रिप्ट मिली है।बाश स्क्रिप्ट

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

पांचवीं पंक्ति (x$str और x"test") पर एक्स क्या है? क्या "x" का कोई विशेष अर्थ है?

उत्तर

2

यह सुनिश्चित करना है कि आपके उदाहरण में अभिव्यक्ति का बायां पक्ष खाली नहीं है। यदि str सेट नहीं किया गया था, तो स्थिति अन्यथा [ == "test" ] होगी जो एक त्रुटि देगी।

इसे खाली करने के लिए एक भी अक्षर का उपयोग करने के बजाय, आप चर को दोहरे उद्धरण वर्णों के अंदर भी डाल सकते हैं, और x पूरी तरह से ([ "$str" == "test" ]) छोड़ सकते हैं।

9

कोई विशेष अर्थ नहीं है, लेकिन अगर $str खाली था, तो

if [ $str == "test" ] 

परीक्षण में कुछ भी नहीं है की एक प्रतिस्थापन में परिणाम होगा और यह इस

if [ == "test" ] 

जैसा होगा एक होगा जो वक्य रचना त्रुटि। सामने एक्स जोड़ने से इस हल होगा, लेकिन इस

if [ "$str" == "test" ] 

है जैसे कि यह हवाले से एक ही प्राप्त करने के एक अधिक पठनीय और बोधगम्य तरीका है।

+0

ऐसा लगता है कि उदाहरण ताजा बैश संकलन का परीक्षण करने के लिए उपयोग किए गए टेस्टकेस से लिया गया था, केवल प्रीपेन्ड एक्स विधि में पाया गया संदर्भ यह तर्क दे रहा था कि विधि बेहतर थी और परीक्षण केस बदला जाना चाहिए या नहीं। – ewanm89

+0

स्वाद का विषय बेहतर है - मैंने एक्स विधि को कुछ स्थानों को देखा है, और मुझे यकीन है कि पाइपलाइनों या गहरे प्रतिस्थापन में जगहें हैं जहां यह वास्तव में कोड को और अधिक पठनीय बना देगा - हालांकि एक जैसे साधारण मामलों के लिए उपर्युक्त, "" सहजता से समझा जाता है और कभी भी कोई सवाल नहीं उठाता। – Soren

+0

हाँ, मैंने यह नहीं कहा कि यह मेरा तर्क था, मैंने कहा कि यह जीएनयू बैश मेलिंग सूची पर तर्क था। – ewanm89

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