Tengo este script:
#!/bin/bash
USERS=("user1.com" "user2.co.uk" "user3.com")
PASSES=("pass1" "pass2" "pass3")
for i in ${USERS[@]}; do
echo ${PASSES[i]};
done
Al ejecutar este script se genera:
my-script.sh: línea 6: user1.com: error de sintaxis: operador aritmético no válido (el token de error es ".com")
Sin embargo, mis valores están entre comillas y, hasta donde yo sé, echo
no es una operación aritmética.
Viniendo de un conocimiento de PHP, esto es confuso. En PHP podemos hacer:
echo gettype($string);
echo gettype($int);
que salidas
entero de cadena
Sin embargo, las citas aparentemente no funcionan como yo creo. ¿Cómo fuerzo el uso de cadenas en lugar de tratarlas user1.com
como user1
.
com
?
Respuesta1
Su código actual se expande a
for i in user1.com user2.co.uk user3.com; do
echo ${PASSES[i]};
done
lo cual por supuesto no tiene ningún sentido. En su lugar, el operador de indirección produce una lista de índices de matriz:
bash$ echo "${!USERS[@]}"
0 1 2
Entonces, con eso, puede recorrer los índices individuales. Agreguemos también citas correctas.
for i in ${!USERS[@]}; do
echo "${PASSES[i]}"
done
Para obtener puntos completos, no debes usar mayúsculas para tus variables privadas; Los nombres de variables en mayúsculas están reservados para uso del sistema.