खोज…
व्हॉट्सएप जब वेरिएबल्स को असाइन करता है
चर असाइन करते समय व्हॉट्सएप मायने रखता है।
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
पहले दो वाक्यविन्यास त्रुटियों (या इससे भी बदतर, एक गलत कमांड को निष्पादित) में परिणाम देगा। अंतिम उदाहरण पाठ "बार" के लिए चर $foo
को सही ढंग से सेट करेगा।
किसी फ़ाइल में अंतिम पंक्ति गुम है
सी मानक कहता है कि फाइलें एक नई लाइन के साथ समाप्त होनी चाहिए, इसलिए यदि ईओएफ एक लाइन के अंत में आता है, तो वह लाइन कुछ कमांड द्वारा याद नहीं की जा सकती है। उदाहरण के तौर पे:
$ echo 'one\ntwo\nthree\c' > file.txt $ cat file.txt one two three $ while read line ; do echo "line $line" ; done < file.txt one two
यह सुनिश्चित करने के लिए कि उपरोक्त उदाहरण में यह सही ढंग से काम करता है, एक परीक्षण जोड़ें ताकि यह लूप को जारी रखे यदि अंतिम पंक्ति खाली न हो।
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
विफल आदेश स्क्रिप्ट निष्पादन को रोकते नहीं हैं
अधिकांश स्क्रिप्टिंग भाषाओं में, यदि कोई फ़ंक्शन कॉल विफल हो जाता है, तो यह एक अपवाद फेंक सकता है और कार्यक्रम का निष्पादन रोक सकता है। बैश कमांड में अपवाद नहीं हैं, लेकिन उनके पास निकास कोड हैं। एक गैर-शून्य निकास कोड संकेतों की विफलता है, हालांकि, एक गैर-शून्य निकास कोड प्रोग्राम के निष्पादन को रोक नहीं पाएगा।
यह खतरनाक (हालांकि माना जाता है कि वंचित) जैसी स्थितियों को जन्म दे सकता है:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
यदि इस निर्देशिका में cd
-ing विफल रहता है, तो बैश विफलता को अनदेखा कर देगा और अगली कमांड को आगे बढ़ाएगा, उस निर्देशिका को साफ़ कर देगा जहाँ से आपने स्क्रिप्ट चलाई थी।
इस समस्या से निपटने का सबसे अच्छा तरीका सेट कमांड का उपयोग करना है:
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
अगर कोई कमांड गैर-शून्य स्थिति देता है, तो set -e
बैश को स्क्रिप्ट से तुरंत बाहर निकलने के लिए कहता है।