2010-02-28 17 views
5

Quiero que mi script defina una matriz vacía. los valores de matriz deben agregarse si la condición predefinida se cumple. para esto lo que he hecho escómo manipular la matriz en el script de 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 

al ejecutar este script que estoy recibiendo algún error como este

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

Para la lectura adicional en matrices de bash miren http://tldp.org/LDP /abs/html/arrays.html –

Respuesta

3

Cuando los datos de configuración de array no recuerdan 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 

ARCHIVOS sin $.


Esto funciona para mí:

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

Como se ve, una pequeña modificación $ (()) para el funcionamiento de matemáticas, pero las asignaciones de archivos es la misma ...


Como se señaló después de muchas pruebas, el shell predeterminado de Ubuntu parece ser el guión, lo que provocó el error.

+0

Hola, enrico, después de eliminar ese $ estoy obteniendo linux-softwares/launchers/join_files.sh: 51: ARCHIVOS [0]: no encontrado ¿Qué es esto? –

+1

¿Recuerdas tu pregunta de hace unos minutos? Espacios duele :) Solo elimine espacios después de ARCHIVOS [$ file_count] –

+0

ohh sí. Perdón por la lesión perdida. :) –

0

se puede escribir de esta manera también

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 

Para: Vijay

pequeña demostración, lista * .txt en el directorio y poner a la matriz ARCHIVOS

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 

salida

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

esto no funciona. El mensaje de error es "files.sh: 39: error de sintaxis:" ("inesperado (esperando") ")" –

+0

hay un "$" adicional en la variable ARCHIVOS. eliminarlo – ghostdog74

+0

No recibí $ ¿dónde está eso? –

1

Para añadir un elemento al final de una matriz, utilice el operador + = (puesto fiesta de 3.1 en 2004):

files+=("$file") 
Cuestiones relacionadas