portávelmente atribui valor à variável de shell nomeada dinamicamente

4

O shell Almquist no Slackware 14.2, mas não o shell Almquist do Debian, suporta a construção a seguir. Outras conchas semelhantes a Bourne não.

setvar "$varname" <...>

Bash evidentemente tem a capacidade de criar dinamicamente nomes de variáveis

declare "magic_variable_$1=$(ls | tail -1)"

Acho que há algumas restrições nos caracteres que podem aparecer em $1 , embora ... ( = vem à mente).

Isto é sugerido como uma solução alternativa para falsificar matrizes associativas em Bashes pré-4.0.

Eu posso criar uma função boba para designar uma variável criada dinamicamente no topo da minha cabeça usando eval .

OBSERVAÇÃO: NÃO USE ESTA FUNÇÃO POR QUALQUER MOTIVO, É TOTALMENTE INSEGURO.

assign_dynamically() {
    eval "$1='$2'"
}

Isso sufoca se o valor $2 contiver ' e não suportar espaços em branco ou metacaracteres em $1 , mas não é uma solução.

Existe uma maneira portátil / POSIX-compatível para escrever uma função que atribui $2 em uma variável chamada $1 , independentemente do conteúdo de qualquer seqüência de caracteres?

    
por Gregory Nisbet 19.12.2016 / 19:18

1 resposta

3

Independentemente de qualquer sequência, não. o primeiro parâmetro precisa ser um nome de variável válido.

dynamic_assign(){ eval "$1"=\"\\" ; }

é tão bom quanto você vai conseguir

    
por 19.12.2016 / 20:10

Tags