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, echo
nã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.com
como 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.