शेल में बूलियन चर की कोई अवधारणा नहीं है।
शैल चर केवल हो सकता है text
(एक स्ट्रिंग), और, कुछ मामलों में, कि पाठ (एक पूर्णांक के रूप में व्याख्या की जा सकती है 1
, 0xa
, 010
, आदि)।
इसलिए, flag=true
इसका तात्पर्य है कि शेल में कोई सत्यता या मिथ्याता नहीं है।
तार
क्या किया जा सकता है या तो एक स्ट्रिंग तुलना है [ "$flag" == "true" ]
या कुछ कमांड में चर सामग्री का उपयोग करें और इसके परिणामों की जांच करें , जैसे निष्पादित करें true
(क्योंकि दोनों निष्पादन योग्य कहलाते हैं true
और एक कहा जाता हैfalse
) एक कमांड के रूप में और जांचें कि क्या उस कमांड का निकास कोड शून्य है (सफल)।
$flag; if [ "$?" -eq 0 ]; then ... fi
या कम:
if "$flag"; then ... fi
यदि चर की सामग्री का उपयोग एक कमांड के रूप में किया जाता है !
, तो कमांड का निकास स्थिति को नकारने के लिए इस्तेमाल किया जा सकता है, अगर एक जगह के बीच में एक! cmd
), जैसे:
if ! "$flag"; then ... fi
स्क्रिप्ट को बदलना चाहिए:
flag=false
while ! "$flag"
do
read x
if [ "$x" == "true" ]
then
flag=true
fi
echo "${x} : ${flag}"
done
पूर्णांक
संख्यात्मक मान और अंकगणितीय विस्तार का उपयोग करें ।
इस स्थिति में, का बाहर निकलें कोड $((0))
है 1
और बाहर निकलने का कोड $((1))
है 0
।
बैश, ksh और zsh में अंकगणित को एक के अंदर किया जा सकता है ((..))
(ध्यान दें कि शुरुआत $
गायब है)।
flag=0; if ((flag)); then ... fi
इस कोड का एक पोर्टेबल संस्करण अधिक जटिल है:
flag=0; if [ "$((flag))" -eq 0 ]; then ... fi # test for a number
flag=0; if [ "$((flag))" == 0 ]; then ... fi # test for the string "0"
बाश / क्षश / zsh में आप कर सकते हैं:
flag=0
while ((!flag))
do
read x
[ "$x" == "true" ] && flag=1
echo "${x} : ${flag}"
done
वैकल्पिक रूप से
आप "एक बूलियन चर उल्टा" कर सकते हैं (बशर्ते इसमें एक संख्यात्मक मान हो):
((flag=!flag))
वह या तो के मूल्य को बदल देगा या ।flag
0
1
नोट : कृपया अपने कोड को प्रश्न के रूप में पोस्ट करने से पहले https://www.shellcheck.net/ में त्रुटियों की जांच करें , कई बार समस्या को खोजने के लिए पर्याप्त है।