2010-02-28 41 views
5

Voglio che il mio script definisca una matrice vuota. i valori dell'array devono essere aggiunti se la condizione predefinita diventa vera. per questo quello che ho fatto ècome manipolare la matrice nello script di shell

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 

durante l'esecuzione di questo script sto ottenendo qualche errore come questo

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

Per ulteriore lettura l'array bash un'occhiata a http://tldp.org/LDP /abs/html/arrays.html –

risposta

3

Quando le impostazioni dei dati in serie non ricorda con $:

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 

FILES senza $.


questo funziona per me:

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

Come si vede, una piccola modifica $ (()) per il funzionamento di matematica, ma i file assegnamenti è lo stesso ...


Come sottolineato dopo un sacco di test, la shell predefinita di Ubuntu sembra essere dash, che ha sollevato l'errore.

+0

Ciao enrico, dopo aver rimosso $ sto diventando linux-software/launcher/join_files.sh: 51: FILES [0]: non trovato cos'è? –

+1

Ricorda la tua domanda di qualche minuto fa? Gli spazi fanno male :) Basta rimuovere gli spazi dopo i FILE [$ file_count] –

+0

ohh sì. Ci scusiamo per la lesione persa. :) –

0

si può scrivere in questo modo pure

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 

A: Vijay

piccola dimostrazione, la lista * .txt nella directory e messo a matrice FILE

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 

uscita

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

non funziona. Il messaggio di errore è "files.sh: 39: Errore di sintassi:" ("unexpected (expect") ")" –

+0

c'è un extra "$" nella variabile FILES. rimuoverla. – ghostdog74

+0

Non ho ricevuto $ dov'è? –

1

Per aggiungere un elemento alla fine di una matrice, utilizzare l'operatore + = (dal bash 3.1 nel 2004):

files+=("$file") 
Problemi correlati