2012-06-14 21 views
18

मैं इस सरल बैश स्क्रिप्ट को निम्नानुसार लिख रहा हूं।बैश सरणी: अप्रत्याशित सिंटेक्स त्रुटि

#!/bin/bash 

array=(/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf) 
echo ${array[@]} 

मुझे उम्मीद है कि यह सरणी में फ़ाइलों के सभी नाम मुद्रित करने की उम्मीद है। अगर मैं

array = {/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf} 

को सरणी की घोषणा बदल

test.sh: 3: Syntax error: "(" unexpected 

इस त्रुटि दूर चला जाता है लेकिन मैं अभी भी नए त्रुटियों

test.sh: 3: array: not found 
test.sh: 4: Bad substitution 

है मैं कैसे हल कर सकते हैं: लेकिन मैं इसके बजाय यह त्रुटि प्राप्त इस मुद्दे? यह शैल प्रोग्रामिंग में मेरा पहला समय है इसलिए मैं खुद को मुद्दों को ठीक करने में असमर्थ हूं।

समाधान किया गया:

मैं श test.sh के रूप में यह क्रियान्वित किया गया था लेकिन मैं भूल गया था मैं बैश test.sh के रूप में यह निष्पादित करने के लिए

+1

यह एक सहयोगी सरणी नहीं है। यह एक सामान्य, संख्यात्मक रूप से अनुक्रमित सरणी है। –

+0

@ डेनिसविल्लियम ओह ठीक है। मैं इसे संपादित कर दूंगा – user1357576

+2

@ user1357576: समाधान को उत्तर के रूप में पोस्ट करें और इसे स्वीकार करें चिह्नित करें, इसे प्रश्न में संपादित न करें। साथ ही, इसे हल करने के लिए शीर्षक को संपादित न करें, जब आप कोई जवाब स्वीकार करते हैं तो वेबसाइट प्रश्न को हल कर लेगी। – Daenyth

उत्तर

1

चर कार्य = संकेत के चारों ओर एक जगह नहीं कर सकते था :

array=(/a/b/ /c/d) 
    ^--no spaces 

आप सुनिश्चित हैं?

[email protected]:~$ array =(a b)  
bash: syntax error near unexpected token `(' 
[email protected]:~$ array= (a b) 
bash: syntax error near unexpected token `(' 
[email protected]:~$ array = (a b) 
bash: syntax error near unexpected token `(' 
[email protected]:~$ array=(a b) 
[email protected]:~$ echo ${array[1]} 
b 
+0

कोई भाग्य नहीं। मैंने अंतरिक्ष को हटा दिया है, फिर भी मुझे सिंटैक्स त्रुटि – user1357576

+0

दिलचस्प रूप से देता है जब मैं इसे टर्मिनल पर सीधे निष्पादित करता हूं, यह काम करता है।लेकिन जब मैं एक ही फाइल को एक फाइल में उपयोग करता हूं, तो यह नहीं होता! – user1357576

+0

@ user1357576: जब मैं उपरोक्त फ़ाइल में डालता हूं तो ठीक काम करता है। बेशक, सिंटैक्स त्रुटि रेखाएं स्क्रिप्ट को मारती हैं, लेकिन यदि यह केवल अंतिम स्थान-कम असाइनमेंट है, तो यह ठीक काम करता है। –

0

सूचक: स्पेस बाश में परिवर्तनीय असाइनमेंट के साथ महत्वपूर्ण हैं। के बराबर चिह्न के बाद या से पहले उनका उपयोग न करें।

+0

मैं समझता हूं कि> मैंने टर्मिनल पर सीधे वही आदेश निष्पादित किए और यह काम किया। लेकिन वही आदेश जो मैंने test.sh में डाल दिया है और निष्पादित किया है, वे त्रुटि फेंकते हैं..क्या आपको पता चलेगा क्यों? – user1357576

+0

@ user1357576 उपरोक्त आपकी टिप्पणी से, ऐसा लगता है कि आपने 'sh' और 'bash' के बीच अंतर सीखा है। कुछ वातावरण में 'sh'' bash' होने की गारंटी नहीं है। वास्तव में, 'sh' अक्सर' dash' जैसे पूरी तरह से POSIX शैल से जुड़ा होता है। –

0

क्या आप अपनी स्क्रिप्ट बनाने के लिए डॉस संपादक का उपयोग कर रहे हैं?

बैश आदि गोले, सीआरएलएफ जोड़े पसंद नहीं करते हैं, केवल एलएफ (या \r\n वर्ण वीएस बस सादा \n चार)।

पंक्तियों के अंत में 'एम ^' वर्ण इस परीक्षण

cat -vet myScript.sh 

आप देख सकते हैं के माध्यम से अपनी स्क्रिप्ट कैसे रखूं? यदि ऐसा है तो यह एक डॉस फ़ाइल है। के रूप में कई लोगों ने इस पर टिप्पणी की है

, आपके सिस्टम तो

dos2unix myScript.sh 

भी तरह उपयोग dos2unix है अगर देखें, array को असाइनमेंट में अपने = संकेत के साथ स्पेस खत्म करने के लिए अपने मूल प्रश्न संपादित करें।

मुझे उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे