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.