2010-02-28 10 views
5

Ich möchte mein Skript ein leeres Array definieren. Array-Werte sollten hinzugefügt werden, wenn die vordefinierte Bedingung wahr wird. für das, was ich getan haben, istWie man Array in Shell-Skript manipulieren

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 

wenn dieses Skript ausführen Ich mag einige Störung erhalte diese

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

Für weitere Lesung zu bash-Arrays einen Blick auf http://tldp.org/LDP nehmen /abs/html/arrays.html –

Antwort

3

Wenn Einstellungsdaten in einem Array mit $ nicht erinnern:

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 

Dateien ohne $.


Dies funktioniert für mich:

#!/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 

Wie Sie, ein wenig Änderung $ (()) für mathematische Operation zu sehen, aber die Dateien assignements ist die gleiche ...


Wie nach vielen Tests darauf hingewiesen, scheint Ubuntu Standard-Shell Strich sein, die den Fehler ausgelöst.

+0

Hi enrico, nach dem Entfernen, dass $ ich bekomme Linux-Software/Launcher/join_files.sh: 51: Dateien [0]: nicht gefunden Was ist das? –

+1

Erinnerst du dich an deine Frage vor einigen Minuten? Spaces tut weh :) Entferne einfach Leerzeichen nach FILES [$ file_count] –

+0

ohh ja. Entschuldigung für die verlorene Läsion. :) –

0

Sie können es auf diese Weise schreiben als auch

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 

An: Vijay

kleine Demonstration, Liste * .txt-Dateien im Verzeichnis und setzen auf Array FILES

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 

Ausgang

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

das funktioniert nicht. Die Fehlermeldung lautet "files.sh: 39: Syntaxfehler:" ("unerwartet (erwartet")) " –

+0

Es gibt ein zusätzliches" $ "in Variablen FILES. entfernen Sie es. – ghostdog74

+0

Ich habe keine $ wo ist das? –

1

Um ein Element an das Ende eines Arrays hinzufügen, verwenden Sie den Operator + = (seit bash 3,1 im Jahr 2004):

files+=("$file")