2010-02-28 17 views
5

में सरणी में हेरफेर करने के लिए कैसे मैं अपनी स्क्रिप्ट को खाली सरणी परिभाषित करना चाहता हूं। पूर्वनिर्धारित स्थिति सत्य होने पर सरणी मानों को जोड़ा जाना चाहिए। इस के लिए मैं क्या किया हैशैल स्क्रिप्ट

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     $FILES[$file_count] = $filename 
     file_count=$file_count+1 
fi 

जब इस स्क्रिप्ट मैं जैसे कुछ त्रुटि हो रही है क्रियान्वित है इस

linux-softwares/launchers/join_files.sh: 51: [0]: not found 
+0

आगे पढ़ने के लिए पर बैश सरणियों http://tldp.org/LDP पर एक नज़र /abs/html/arrays.html –

उत्तर

3

सरणी में सेटिंग डेटा $ के साथ याद नहीं करता है:

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[$file_count]=$filename 
     file_count=$file_count+1 
fi 

$ बिना फाइलें।


यह मेरे लिए काम करता है:

#!/bin/bash 
declare -a FILES 
file_count=0 

file_ext='jpg' 
SUPPORTED_FILE_TYPE='jpg' 
filename='test.jpg' 

if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[$file_count]=$filename 
     file_count=$(($file_count+1)) 
fi 

जैसा कि आप देख, गणित आपरेशन के लिए एक छोटे संशोधन $ (()), लेकिन फ़ाइलें assignements एक ही है ...


जैसा कि कई परीक्षणों के बाद बताया गया है, उबंटू डिफ़ॉल्ट खोल डैश लगता है, जिसने त्रुटि उठाई।

+0

हाय एनरिको, उस $ को हटाने के बाद मुझे लिनक्स-सॉफ्टवेयर/लॉन्चर्स/join_files.sh: 51: FILES [0]: नहीं मिला यह क्या है? –

+1

कुछ मिनट पहले अपना प्रश्न याद रखें? रिक्त स्थान दर्द होता है :) बस FILES के बाद रिक्त स्थान हटाएं [$ file_count] –

+0

ओह हाँ। खोया घाव के लिए खेद है। :) –

0

आप इसे इस तरह के रूप में अच्छी

declare -a FILES 
file_count=0 
if [ "$file_ext" != "$SUPPORTED_FILE_TYPE" ] ; then 
     echo "$file_ext is not supported for this task." 
else 
     FILES[((file_count++))]=$filename 
fi 

करने के लिए लिख सकते हैं: विजय

छोटे प्रदर्शन, सूची * निर्देशिका में .txt फ़ाइलें और सरणी के लिए रखा फ़ाइलें

declare -a FILES 
i=0 
for file in *.txt 
do 
    FILES[((i++))]=$file 
done 
# display the array 
for((o=0;o<${#FILES};o++)) 
do 
    echo ${FILES[$o]} $o 
done 

उत्पादन

$ ./shell.sh 
A.txt 0 
B.txt 1 
file1.txt 2 
file2.txt 3 
file3.txt 4 
+0

यह काम नहीं करता है। त्रुटि संदेश "files.sh: 39: सिंटेक्स त्रुटि:" ("अप्रत्याशित (उम्मीद") ")" –

+0

परिवर्तनीय FILES में एक अतिरिक्त "$" है। इसे हटा दो। – ghostdog74

+0

मुझे कोई $ $ नहीं मिला था? –

1

एक सरणी के अंत में एक तत्व जोड़ने के लिए, (2004 में बैश 3.1 के बाद से) + = ऑपरेटर का उपयोग करें:

files+=("$file") 
संबंधित मुद्दे