Introdução
Em scripts bash, atribuir a saída de um comando a variáveis pode ser conveniente armazenando as saídas dos comandos e usando-as posteriormente.
Neste pequeno guia, veremos como você pode armazenar a saída de um comando como uma variável no Bash.
O básico para configurar variáveis
Salvar a saída de um comando como uma variável é obtido por meio de substituição de comando. A substituição de comando é um wrapper que executa o comando em um ambiente subshell, e substitui o comando encapsulado pela saída padrão do ambiente no qual o comando foi executado. Esta saída pode ser referenciada posteriormente, se conectada a uma variável de referência!
A substituição de comandos pode ser feita através de acentos graves ou do cifrão entre parênteses:
`command`
$(command)
Há um debate sobre se `comando` (retrocessos) ou $ (comando) (sinal de dólar e parênteses) deve ser usado como a “melhor prática”. $(command)
funciona bem no aninhamento e melhora a legibilidade em alguns casos, mas você pode usar qualquer uma das sintaxes nos exemplos seguintes.
Dito isto - atribuir a saída de um comando a uma variável no Bash é tão fácil quanto:
VARIABLE=$(command)
echo "${VARIABLE}"
Corrida ${variable}
é conhecido como expansão de parâmetro, e é usado para avaliar e buscar o valor associado a uma variável de referência.
Vamos agora dar uma olhada no exemplo simples de configuração de uma variável para um comando para alterar a cor de saída:
#!/bin/bash
GREEN=$(tput setaf 2)
echo "${GREEN}Please"
ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit"
echo "${GREEN}Paris"
No snippet, usamos o tput
comando e atribuído o valor retornado desses comandos para imprimir texto colorido. o setaf
altera a cor do primeiro plano e 3 (verde) e 9 (laranja) são códigos de cores.
Agora vamos passar para outro exemplo que contém várias condições para configurar variáveis para diferentes comandos:
#!/bin/bash
PERSON=$(whoami)
echo -e "Hey ${PERSON}! I am Charlien"
DETAILS=$(uname -a)
echo -e "You're running this script on:n${DETAILS}n"
DATES=$(date)
echo -e "The script is being run on:n${DATES}n"
CREATE=$(touch $(date +"%d%m%Y").txt)
echo -e "A text file logging this run is created.${CREATE}n"
LOCATION=$(ls
-l *txt)
echo -e "Saved text file at: ${LOCATION}"
No roteiro acima, o whoami
O comando retorna o nome de usuário do usuário atual. o uname -a
retorna as informações do sistema e o date
retorna a hora e a data atuais.
Observação: Podemos encadear a atribuição de variáveis adicionando vários comandos em uma única chamada aninhada. o CREATE
variável contém a saída do touch
comando, que por sua vez cria um arquivo e define o nome do arquivo para a saída do date +"%d%m%Y
comando.
Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!
Por fim, adicionamos um multiline
conceito de atribuição de variável de comando adicionando uma barra invertida ()
Entre o ls
comando -l
sinalizador para exibir apenas arquivos de texto usando *.txt
. A barra invertida é um caractere de escape que informa ao shell para não interpretar o próximo caractere.
No echo
comando, adicionamos o -e
sinalizador para usar o caractere especial, ou seja, n
(nova linha), para imprimir a saída na nova linha.
Obtemos o seguinte resultado após a execução do script:
$ ./variable.sh
Conclusão
Neste pequeno guia, vimos como você pode definir a saída de um comando para uma variável no Bash. Demos uma olhada na diferença entre as sintaxes para substituição de comando, observando as melhorias de legibilidade de $(command)
sobre a substituição baseada em backtick. Em seguida, analisamos vários exemplos de atribuição simples e atribuição de saída encadeada/aninhada.