एक बैश स्क्रिप्ट में खराब प्रतिस्थापन - बाश

मुझे एक बैश स्क्रिप्ट मिली है (वे "टी विरासत अद्भुत नहीं हैं!) और मैं यह जानने की कोशिश कर रहा हूं कि क्या गलत हो रहा है।

अपमानजनक रेखा यह है: while [ "${(#)}" -gt 0 ] ; do

और जब मैं इसे चलाने का प्रयास करता हूं तो मुझे एक "खराब प्रतिस्थापन" त्रुटि संदेश मिलता है। मुझे यकीन है कि यह पूछने की कोशिश कर रहा है कि क्या तर्क की संख्या शून्य से अधिक है, लेकिन आप उसे भी जानते हैं।

मुझे नहीं पता कि यह कभी काम करता है। मुझे लगता है कि पर्याप्त बैकस्लाश नहीं हैं, या शायद बहुत सारे हैं, या शायद ब्रांड्स वहां से संबंधित नहीं हैं। मैंने इनमें से कई की कोशिश की, लेकिन कोई भाग्य नहीं।

किसी भी ज्ञान की सराहना की।

उत्तर:

जवाब के लिए 2 № 1

यद्यपि मूल रेखा आपके द्वारा उल्लिखित त्रुटि संदेश (खराब प्रतिस्थापन) उत्पन्न करती है, फिर भी समस्या को ठीक करने के लिए केवल कोष्ठक को हटाने के लिए पर्याप्त होना चाहिए। उदाहरण के लिए, फ़ाइल में निम्नलिखित के साथ while-num

#!/bin/bash
while [ "${#}" -gt 0 ] ; do
echo $1
shift
done

और इसके साथ आह्वान (उदाहरण के लिए) ./while-num 18173.msg 18179.msg 18201.msg पैदा करता है

18173.msg
18179.msg
18201.msg

मेरी उबंटू -12 प्रणाली पर, पहली पंक्ति होने पर एक ही आउटपुट परिणाम होता है #!/bin/sh। (उबंटू पर डिफ़ॉल्ट खोल बैश के बजाय डैश है।) यह ठीक काम करता है जब while लाइन बदल दी गई है while[ $# -gt 0 ] ; do (यानी उद्धरण और ब्रेसिज़ की आवश्यकता नहीं है क्योंकि $# एक संख्या देता है)।


संबंधित सवाल
सबसे लोकप्रिय