बैश के लिए एक त्वरित बूलियन प्राइमर
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
तकनीकी रूप से "कमांड" और नहीं "बयान" कर रहे हैं; यह सिर्फ एक बहुत ही बुनियादी, कार्यात्मक स्पष्टीकरण है।