2012-06-14 16 views
18

Estoy escribiendo este script simple bash de la siguiente manera.Bash array: Inesperado Error de sintaxis

#!/bin/bash 

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

Esperaba que imprimiera todos los nombres de los archivos en la matriz. Pero me sale este error en su lugar:

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

Si cambio de la declaración de matriz para

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

este error desaparece pero todavía tengo nuevos errores

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

¿Cómo puedo resolver ¿este problema? Esta es mi primera vez en la programación de shell, así que no puedo solucionar los problemas yo mismo.

RESUELVE:

que estaba ejecutando como test.sh sh, pero se me olvidó que tenía que ejecutar como test.sh fiesta

+1

Eso no es una matriz asociativa. Es una matriz normal indexada numéricamente. –

+0

@DennisWilliamson Oh Ok. Lo editaré – user1357576

+2

@ user1357576: publique la solución como una respuesta y márquela como aceptada, no la edite en la pregunta. Además, no edite el título para resolverlo, el sitio web marcará la pregunta como resuelta cuando acepte una respuesta. – Daenyth

Respuesta

1

Las asignaciones de variables no pueden tener un espacio alrededor del signo = :

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

¿Estás seguro?

[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

Sin suerte. He eliminado el espacio todavía me da el error de sintaxis – user1357576

+0

curiosamente cuando lo ejecuto directamente en el terminal, funciona.Pero cuando uso lo mismo en un archivo, ¡no funciona! – user1357576

+0

@ user1357576: funciona bien aquí cuando pongo lo anterior en un archivo. Por supuesto, las líneas de error de sintaxis matan la secuencia de comandos, pero si se trata de la asignación final sin espacio, funciona bien. –

0

Puntero: Los espacios son importantes con la asignación de variables en BASH. No los use antes de o después de el signo igual.

+0

Entiendo que> ejecuté los mismos comandos directamente en el terminal y funcionó. PERO los mismos comandos que pongo en test.sh y ejecutan, arrojan el error ... ¿Sabrías por qué? – user1357576

+0

@ user1357576 De tu comentario anterior, parece que has aprendido la diferencia entre 'sh' y' bash'. 'sh' no se garantiza que sea' bash' en algunos entornos. De hecho, 'sh' a menudo está vinculado a shells puramente POSIX como' dash'. –

0

¿Está utilizando un editor de DOS para crear su secuencia de comandos?

Bash, etc, conchas, no me gustan los pares CRLF, solo LF (o \r\n caracteres VS simplemente \n char).

Ponga su secuencia de comandos a través de esta prueba

cat -vet myScript.sh 

¿Ves caracteres '^ M' al final de las líneas? Si es así, eso es un archivo dos.

ver si su sistema ha dos2unix luego usarlo como

dos2unix myScript.sh 

También, ya que varias personas han comentado sobre el mismo, por favor, edite su pregunta original para eliminar los espacios alrededor de sus = señales en las asignaciones a array.

Espero que esto ayude.

Cuestiones relacionadas