Var1 é definido para o conteúdo do comando executado, como configurar Var2 para ser o comando de Var1

1

Estou procurando ter duas variáveis.

Eu já tenho uma configuração de trabalho como segue

var1="$(echo hello)"

Quando impresso como abaixo, diz "olá"

"${var1}" = "hello"

O que eu gostaria é de

var2=$var1

Quando impresso, exibe "echo hello"

"${var2}" = "echo hello"

Isso pode ser logicamente impossível, já que o var1 está definido para ser a saída do comando, está lá de qualquer maneira eu posso definir var2 para puxar o comando que define var1 não a saída do comando?

    
por FreeSoftwareServers 07.08.2016 / 04:11

1 resposta

1

Você não pode puxar o comando que gerou a variável porque a informação não está mais lá. No entanto, você pode atrasar quando o comando para gerar var1 for executado usando eval . Por exemplo:

var1="echo hello"
echo "var1: $var1"

var2="$var1"
echo "var2: $var2"

var1=$(eval "$var1")
echo "var1: $var1"

imprimirá:

var1: echo hello
var2: echo hello
var1: hello

Como você pode usar eval para executar o comando dentro de var1 até que a saída desse comando seja necessária, você pode manter o próprio comando em var1 .

Embora esta não seja uma boa prática de codificação. Em praticamente todos os casos, é melhor ter duas variáveis: uma vez segurando o comando e uma segurando a saída. Usar eval é desaprovado, por vários problemas de segurança e depuração geral.

Em uma nota lateral, neste caso específico em que você tem um comando onde os únicos caracteres especiais do shell são espaços em branco, vários shells permitem que você execute a execução de subshell a partir da variável sem a necessidade de eval , ou seja, na maioria das conchas:

var3=$($var1)

Funciona em bash e ksh variants. Não faz em zsh variants.

    
por 07.08.2016 / 04:18