Atribuindo valores a variáveis variáveis

0

Estou tendo problemas com um loop for, semelhante ao abaixo:

for VARIABLE in alpha bravo charlie; do
  $VARIABLE='sed -n '/$VARIABLE/s///gp;' $FILE'
done

$ FILE pode conter algo como

alpha sandy
bravo cathy
charlie barbara

Os resultados esperados devem ser ...

echo $alpha     # sandy
echo $bravo     # cathy
echo $charlie   # barbara

Infelizmente recebo erros:

bash: alpha=alpha: command not found
bash: bravo=alpha: command not found
bash: charlie=alpha: command not found
    
por Felipe Alvarez 10.02.2012 / 04:23

2 respostas

1

Você não percebe isso, mas precisa executar o loop interno duas vezes ao longo do loop. Uma vez para obter o nome da variável para atribuir, então a segunda vez para realmente fazer a atribuição. Você faz isso com eval. Estou muito impaciente para depurar isso agora, mas isso deve ser um começo:

for VARIABLE in alpha bravo charlie; do
  eval $VARIABLE=$(sed -n '/$VARIABLE/s///gp;' $FILE)
done

No caso geral, você pode precisar escapar de $ s em sua linha, dependendo se você deseja que as variáveis sejam substituídas na primeira ou segunda execução. No seu caso, não faz diferença, exceto pela primeira, e você a quer na primeira invocação.

    
por 10.02.2012 / 05:07
1

Para que você não precise saber os nomes das variáveis de antemão, você pode escrever:

output=$(sed 's/ \+/="/;s/$/"/' "$FILE")
eval "$output"

echo $alpha     # sandy
echo $bravo     # cathy
echo $charlie   # barbara
    
por 10.02.2012 / 16:11

Tags