2012-12-20 16 views
10

मैं virtualenv के स्रोत कोड देख रहा हूँ, और सक्रिय स्क्रिप्ट इस कोड में शामिल हैं:क्या होता है यदि ["x"! = X] बाश में करते हैं?

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1"  
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
     # special case for Aspen magic directories 
     # see http://www.zetadev.com/software/aspen/ 
     PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
    fi 
    fi 
    export PS1 
fi 

लाइन if [ "x" != x ] क्या करता है? x स्क्रिप्ट में कहीं और परिभाषित नहीं किया गया है।

उत्तर

10

बैश में, वह परीक्षण विफल होने की गारंटी है; [ "x" != x ] हमेशा एक गैर-शून्य निकास स्थिति (यानी "झूठी") देता है, क्योंकि "x" और x दोनों स्ट्रिंग दोनों वर्ण x होते हैं। (उद्धरण चिह्नों वास्तव में इस मामले में कोई असर नहीं है।)

इतना ही नहीं, आदेश PS1="$PS1" वास्तव में कुछ भी नहीं है, या तो: यह सिर्फ चर PS1 मूल्य यह पहले से ही है के बराबर सेट।

मुझे लगता है कि इस स्क्रिप्ट को किसी तरह से स्वत: उत्पन्न किया गया है, और कुछ प्रणालियों पर, ये कथन थोड़ा अलग दिखाई देंगे, और थोड़ा कम बेकार होगा।

+3

पुराने पुराने गोले पर खाली तारों की जांच के लिए पुरानी '[" x $ foo "! = X]' चाल की तरह दिखता है। –

+0

यह वही है जो चल रहा है। लिपि स्वतः उत्पन्न होती है, और कभी-कभी एक चर होता है जो वहां विभाजित हो जाता है। [यह] देखें (https://github.com/pypa/virtualenv/blob/develop/virtualenv_embedded/activate.sh#L59) और [यह] (https://github.com/pypa/virtualenv/blob/develop/ virtualenv.py # L1582)। धन्यवाद! –

+0

@AKaptur: आपका स्वागत है! – ruakh