¿Cómo forzar el tipo de cadena en una variable?

¿Cómo forzar el tipo de cadena en una variable?

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é, echono 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.comcomo 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.

información relacionada