2 votos

Intenté usar arrays de bash pero por alguna razón esto falla?

Estoy tratando de hacer un script que debe ser ejecutado con crontab, pero estoy teniendo dificultades para declarar un array y obtener la clave y el valor de ese array. (Corriendo MacOS 10.12.6)

Esto es lo que tengo hasta ahora:

#!/bin/bash

declare -A listofnames

listofnames[one]="one test"
listofnames[two]="two test"

for val in "${listofnames[@]}"; do
    echo $val
done

Y esto me da un error: declare: usage: declare [-afFirtx] [-p] [name[=value] ...] y la salida que two test .

Resultado esperado:

$ ./test.sh
one test
two test

0 votos

Vamos, amigos no voten hacia abajo sin una explicación.

1 votos

MacOS viene con la versión 3 de bash (por razones de licencia), pero las matrices asociativas no se añadieron a bash hasta la versión 4. Si no puedes hacer lo que necesitas con matrices indexadas numéricamente, tu mejor opción sería instalar bash v4 con homebrew y luego cambiar la línea shebang para usarla en lugar de la versión incorporada.

0 votos

¿Qué versión de MacOS utilizas?

2voto

Douglas Puntos 10417

No es necesario que declare su matriz por adelantado, pero si lo hace, debe utilizar la "a" minúscula; no la mayúscula.

declare -a listofnames

En segundo lugar, es necesario utilizar indicios numéricos cuando se hace referencia a un elemento de la matriz

listofnames[one] <----- incorrect
listofnames[1]   <----- correct

Así que, para tus dos elementos, debería ser así:

listofnames[1]="one test"
listofnames[2]="two test"

O se asignan todos los valores a la vez, teniendo en cuenta que el primer elemento tiene índice 0

listofnames=("", "one test", "two test)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X