# [BASH] Declaracion de arrays en script (SOLUCIONADO)

## ZaPa

Hola...

Estoy haciendo mis pinitos en bash y ahora le toca el turno a los arrays...

El caso es que no puedo declarar arrays, al hacer:

```

cosa[0]=hola

cosa[1]=23

cosa[3]=24

```

Me muestra el siguiente mensaje:

```

arrays.sh 3: cosa[0]=hola not found

arrays.sh 4: cosa[1]=23 not found

arrays.sh 5: cosa[2]=24 not found

```

¿Que ocurre aqui?

Seguro debe ser una tonteria pero no doy con la tecla.

Un saludo.

----------

## esteban_conde

El valor de cosa se obtiene con $cosa y asi sucesivamente.

----------

## ZaPa

Hola.

Esteban_conde, solamente estoy intentando declarar el array como he mencionado más arriba nada más...

Solamente escribiendo esas lineas que he mostrado en mi post de arriba me da error, no intento mostrar el contenido ni nada por el estilo. Ya que, con esas 3 lineas, me muestra ese error.

Saludos.

----------

## esteban_conde

http://tldp.org/LDP/abs/html/arrays.html

A lo mejor eso te lo aclara mejor que lo haria yo.

----------

## ZaPa

Hola de nuevo y gracias por tu interes.

El documento que me has pasado declara los arrays igual que lo estoy haciendo yo:

```

area[11]=23

area[13]=37

area[51]=UFOs

```

En este caso esta declarando un array y rellena la posicion 11, la 13 y la 51..... 

Al intentar implementar lo mismo en mi script me muestra el siguiente error:

```

arrays.sh: 4: area[11]=23: not found

arrays.sh: 5: area[13]=37: not found

arrays.sh: 6: area[51]=UFOs: not found

```

También he intentado declarar el array de la siguiente forma:

```

arraynuevo=( uno dos tres cuatro cinco )

```

Con lo que tambien me muestra un error:

```

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

```

¿alguna idea?

Saludos.

----------

## afb

Pon tu script completo pues acabo de probar tu ejemplo en la consola funciona correctamente.

----------

## ZaPa

Gracias,  afb y esteban_conde por vuestra colaboración...

Pero..ya encontré la solución, y era la forma de ejecutar el script.....

Lo hacia de la siguiente manera:

```

sh script.sh

```

Ejecutando de la forma anterior no funcionaba nada relacionado con el tema de los arrays....

Para que funcionara bien, ahi que ejecutarlo como cualquier ejecutable/binario, con ./

```

./script.sh

```

¿Tienen alguna idea de porque esto es asi? ¿porque con sh no funciona y con ./ si? ¿Alguna explicación logica?

Un saludo.

----------

## esteban_conde

En linux los ejecutables suelen estar en /usr/bin en /usr/sbin en /bin en /sbin y en algun sitio más que suele variar con los distintos tipos de instalación (seguro que habrá alguien que alargue esta explicación) esto es lo que se conoce como path si un ejecutable está en el path se ejecuta nombrandolo desde cualquier sitio, si no lo está hay que dar su ruta completa y esto es lo que haces al nombrar el script ./script.sh  "./" es su ruta completa es decir el directorio actual (donde estás en ese momento).

----------

## Coghan

el comando sh no es más que un enlace a /bin/bash

```
0 lrwxrwxrwx 1 root root 4 may 20 11:20 /bin/sh -> bash
```

Prueba a ejecutar 

```
bash arrary.sh
```

si funciona puede ser que /bin/sh esté apuntando a otro intérprete de comandos

----------

## ZaPa

Hola de nuevo y muchisimas por sus respuestas....

Coghan,  ejecutando:

```

bash script.sh

```

Funciona correctamente.

He hecho un ls -la | grep sh en /bin/ y efectivamente. Sh esta apuntando a otro interprete de comandos en este caso 'dash':

```

lrwxrwxrwx  1 root root       4 2009-04-23 03:42 sh -> dash

```

¿La solución? 

MUY SENCILLA.

Eliminamos el enlace simbolico 'sh' que apunta al interprete de comandos 'dash':

```

rm /bin/sh

```

Lo creamos nuevamente pero ahora si, correctamente  :Very Happy:  :

```

ln -s bash sh

```

Con esto ya esta solucionado.

Espero que le sirva a alguien de ayuda.

Muchisimas gracias por vuestras respuestas y tiempo.

Un saludo.

----------

## Coghan

app-shells/dash es otra versión de la consola ash, si tienes dos consolas o más instaladas en tu sistema, la última que se instaló redirigirá el enlace /bin/sh a su ejecutable, para solucionarlo, a parte  de volver a enlazar a mano como idica @Zapa, se puede instalar un eselect que viene en el overlay sunrise: app-admin/eselect-sh. De esta manera podrás cambiar de una shell a otra a lo Gentoo.

----------

