बैश के लिए एक त्वरित बूलियन प्राइमर
ifबयान एक तर्क के रूप में एक कमांड लेता है (के रूप में करते हैं &&, ||, आदि)। कमांड के पूर्णांक परिणाम कोड को बूलियन (0 / null = true, 1 / अन्यथा = false) के रूप में समझा जाता है।
testबयान तर्कों के रूप ऑपरेटरों और ऑपरेंड लेता है और के स्वरूप में ही एक परिणाम कोड लौटाता है if। testबयान का एक उपनाम है [, जिसका उपयोग अक्सर ifअधिक जटिल तुलना करने के लिए किया जाता है ।
trueऔर falseबयानों कुछ भी नहीं है और एक परिणाम कोड लौटाते (0 और 1, क्रमशः)। तो उन्हें बश में बूलियन शाब्दिक के रूप में इस्तेमाल किया जा सकता है। लेकिन यदि आप कथनों को एक ऐसे स्थान पर रखते हैं जहाँ उन्हें स्ट्रिंग के रूप में व्याख्यायित किया जाता है, तो आप मुद्दों पर चलेंगे। आपके मामले में:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
इसलिए:
if [ true ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true ; then echo "This text will always appear." ; fi;
if false ; then echo "This text will never appear." ; fi;
यह echo '$foo'बनाम कुछ करने जैसा है echo "$foo"।
testबयान का उपयोग करते समय , परिणाम उपयोग किए गए ऑपरेटरों पर निर्भर करता है।
if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ] # true if $foo is a file that exists (by path)
if [ "$foo" ] # true if $foo evaluates to a non-empty string
if foo # true if foo, as a command/subroutine,
# evaluates to true/success (returns 0 or null)
संक्षेप में , यदि आप केवल पास / फेल (उर्फ "सही" / "गलत") के रूप में कुछ परीक्षण करना चाहते हैं, तो ब्रैकेट के बिना, अपने ifया &&आदि विवरण में एक कमांड पास करें । जटिल तुलना के लिए, उचित ऑपरेटरों के साथ कोष्ठक का उपयोग करें।
और हाँ, मैं वहाँ बैश में एक देशी बूलियन प्रकार के रूप में ऐसी कोई बात नहीं है, और है कि बारे में पता कर रहा हूँ ifऔर [और trueतकनीकी रूप से "कमांड" और नहीं "बयान" कर रहे हैं; यह सिर्फ एक बहुत ही बुनियादी, कार्यात्मक स्पष्टीकरण है।