Você também pode usar um loop aritmético para isso:
a=(user1 pass1 user2 pass2)
for ((i=0; i<${#a[@]}; i+=2)); do
echo "${a[i]}: ${a[i+1]}"
done
Em python e em algumas outras linguagens de programação, é fácil obter um vetor em vez de uma variável em todos os lugares e em loops. como python:
for variable in [[user1,pass1],[user2,pass2],[user3,pass3],...]
print variable[0]
print variable[1]
Mas como posso obter dois argumentos em um ciclo, no shell?
No bash, você pode criar uma matriz, mas as estruturas de dados aninhadas não são suportadas. Portanto, você tem que hackear alguma coisa. Por exemplo, você pode usar um separador:
#! /bin/bash
for tuple in user1#pass1 user2#ls\;ls user3#pass#3 ; do
user=${tuple%%#*}
password=${tuple#*#}
echo User $user
echo Password $password
done
Apenas certifique-se de que o primeiro valor nunca contenha o separador.
Ou use set
com uma lista simples e shift
o número correto de membros em cada iteração:
#! /bin/bash
set -- user1 pass1 user2 ls\;ls user3 pass#3
while (( $# )) ; do
user=$1
password=$2
shift 2
echo User $user
echo Password $password
done
Eu gosto de perl para essas coisas, você pode chamar isso de dentro de um script bash:
perl -e 'my %users= ("user1" => "pass1","user2" => "pass2");
for ( sort keys %users)
{
print "$_\t$users{$_}\n";
}'