Bash - Como usar uma variável no nome de uma variável

1

Sim, sim, eu sei que você provavelmente está "Ei, há centenas de outras pessoas fazendo essa mesma pergunta", mas isso não é verdade; Eu não estou tentando fazer algo assim:

foo="example1"
bar="example2"
foobar="$foo$bar"

Estou tentando fazer isso:

foo="example1"
$foo="examle2"

Mas sempre que eu faço isso, recebo uma mensagem de erro que diz:

bash: example1=example2: command not found

Alguma sugestão? Isso é possível?

    
por Anonymous User 216 22.08.2018 / 21:35

3 respostas

6

Aqui estão alguns exemplos:

declare [-g] "${foo}=example2"
declare -n foo='example1'
foo='example2'
eval "${foo}=example2"
mapfile -t "${foo}" <<< 'example2'
printf -v "${foo}" '%s' 'example2'
IFS='' read -r "${foo}" <<< 'example2'
typeset [-g] "${foo}=example2"

Como outros usuários disseram, tenha cuidado com eval e com atribuições indiretas em geral.

    
por 22.08.2018 / 22:07
0

É possível usar eval .

eval $foo="examle2"

Esteja ciente de que você deve ter certeza de que o valor de $foo pode ser confiável.

Uma alternativa melhor é usar matrizes indexadas, nas quais você não corre o risco de executar comandos arbitrários.

    
por 22.08.2018 / 21:39
0
suffix=bzz
declare -g prefix_$suffix=mystr

... e depois ...

varname=prefix_$suffix
echo ${!varname}

Desprezado e roubado de aqui .

Edit: Como afirmado por Stephane, isso geralmente é uma má idéia e deve ser evitado. Matrizes indexadas são uma alternativa melhor.

    
por 22.08.2018 / 21:40