2012-11-08 8 views
7

जब मैं बैश में टाइप करता हूं: if [ false ]; then echo 'ok'; fi; मुझे परिणामस्वरूप ok स्ट्रिंग मिलती है? परिवर्तनीय परिणाम का उपयोग करते समय मैं भी प्राप्त कर सकता हूं: ok=false; if [ $ok ]; then echo 'ok'; fi;क्यों [झूठा]; फिर 'ठीक' गूंजें; फाई; प्रिंट ठीक है?

+0

क्षमा करें, मेरी गलती। –

उत्तर

10

if [ false ]if [ -n "false" ] के बराबर है - यह स्ट्रिंग की लंबाई का परीक्षण कर रहा है। यदि आप /bin/false के निकास कोड का परीक्षण करने का प्रयास कर रहे हैं, तो if false ([ का उपयोग करें, जो कि कई के लिए नहीं है, लेकिन सभी के लिए नहीं, आधुनिक गोले एक शेल है जो लगभग /usr/bin/[ या /usr/bin/test के बराबर है)।

+0

यह अन्य उत्तरों की तुलना में बेहतर बताता है, लेकिन '['अंतर्निहित कमांड होने वाला है, बाहरी बाइनरी नहीं। – jordanm

+0

@jordanm कुछ गोले के लिए सच है, लेकिन सभी नहीं ... हालांकि, मुझे लगता है कि ओपी को 'बाश' के साथ टैग किया गया था जिसके लिए '[' आंतरिक है ... थोड़ा सा उत्तर स्पष्ट किया गया है। – twalberg

3

true और false बैश में बूलियन के लिए कीवर्ड builtin नहीं कर रहे हैं उसी तरह वे अन्य प्रोग्रामिंग भाषाओं

लिए कर रहे हैं

आप एक चर के सही/गलत हालत के परीक्षण के रूप में इस अनुकरण कर सकते हैं:

cond1="true" 
cond2="false" 

if [ "$cond1" = "true" ]; then 
    echo "First condition is true" 
fi 

if [ "$cond2" = "false" ]; then 
    echo "Second condition is false" 
fi 

आप कर रहे हैं जब:

if [ false ] 

यह परोक्ष

करने के लिए अनुवाद
if [ -n "false" ] 

कहाँ -n अर्थ है "परीक्षण अगर यह लंबाई 0 से अधिक है: तार्किक सत्य यदि हां, तो तार्किक रूप से झूठी अन्यथा"

एक तरफ - true और false वास्तव में कुछ करना है, लेकिन वे आदेशों हैं:

man true 
man false 

उनके बारे में अधिक पढ़ने के लिए।

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