Constrói variável de shell dinamicamente

2

Eu preciso criar dinamicamente um nome de variável da seguinte forma (exemplo simplificado):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

# How to get this value contains $SERIES1 or $SERIES2
# depending on the value of $IDX
CURRENT=${SERIES\${IDX}} # doesn't work, just an example

Se IDX=1 esperaria ter

echo $CURRENT

para exibir

a b c d e f g

e se IDX=2 exibir

h i j k l m n

Eu precisarei usá-lo em um loop para um número indeterminado de SÉRIE vindo de outro script.

EDITAR Atualmente usando sh como shell, mas se necessário eu posso usar um diferente (mesmo que isso signifique que eu precise converter algumas coisas, mas está tudo bem)

Minha pergunta é: Como atribuo a série desejada a CURRENT

O que eu tentei? O exemplo acima (que não funciona) e outros sabores como:

CURRENT=$${SERIES$${IDX}}
CURRENT=${SERIES${IDX}}

EDIT2

Estou a caminho de algo:

eval echo $'echo "SERIES$IDX"'

Isso exibe a série correta. No entanto, não consigo encontrar uma maneira de atribuí-lo a CURRENT :

CURRENT=eval echo $'echo "SERIES$IDX"'

Mas eu acho que mais cavar e eu vou encontrar alguma coisa. Qualquer ajuda apreciada embora

EDIT3

Ok, achei :

eval "CURRENT=\$SERIES$IDX"
echo $CURRENT

exibe o que eu espero, então CURRENT tem o conteúdo certo.

    
por JScoobyCed 22.05.2013 / 10:37

2 respostas

3

Obrigado ao site (e provavelmente outros têm uma resposta semelhante ...):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

eval "CURRENT=\$SERIES$IDX"

Agora, CURRENT detém o conteúdo de SERIES1 . Se eu alterar IDX para 2, obtenho SERIES2 content.

    
por 22.05.2013 / 12:01
1

Isso não é exatamente o que você deseja, mas se você usar bash em vez de sh , poderá usar matrizes:

IDX=1
SERIES[1]="a b c d e f g"
SERIES[2]="h i j k l m n"

CURRENT=${SERIES[$IDX]}
    
por 22.05.2013 / 11:50

Tags