Como forçar o tipo de string em uma variável?

Como forçar o tipo de string em uma variável?

Eu tenho esse script:

#!/bin/bash
USERS=("user1.com" "user2.co.uk" "user3.com")
PASSES=("pass1" "pass2" "pass3")

for i in ${USERS[@]}; do
    echo ${PASSES[i]};
done

executar este script gera:

my-script.sh: linha 6: user1.com: erro de sintaxe: operador aritmético inválido (o token de erro é ".com")

No entanto, meus valores estão entre aspas e, até onde eu sei, echonão é uma operação aritmética.

Vindo de uma experiência em PHP, isso é confuso. Em PHP podemos fazer:

echo gettype($string);
echo gettype($int);

quais saídas

string
inteiro

No entanto, as citações aparentemente não funcionam como eu pensava. Como faço para forçar o uso de strings em vez de tratar user1.comcomo user1 . com?

Responder1

Seu código atual se expande para

for i in user1.com user2.co.uk user3.com; do
    echo ${PASSES[i]};
done

o que obviamente não faz sentido algum. O operador indireto produz uma lista de índices de array:

bash$ echo "${!USERS[@]}"
0 1 2

Com isso, você pode percorrer os índices individuais. Vamos também adicionar citações corretas.

for i in ${!USERS[@]}; do
    echo "${PASSES[i]}"
done

Para pontos completos, você não deve usar letras maiúsculas para suas variáveis ​​privadas; nomes de variáveis ​​​​maiúsculos são reservados para uso do sistema.

informação relacionada