Skip to content
Latchkey

O Que É Command Substitution? Usando a Saída como Valor

Command substitution roda um comando e o substitui por sua saída, permitindo usar o resultado de um comando como um valor dentro de outro.

Muitas vezes você precisa da saída de um comando como entrada ou argumento de outro, o commit atual do Git, a data de hoje, o resultado de uma query. Command substitution faz exatamente isso: roda um comando e insere sua saída na linha ao redor. Scripts de CI dependem disso constantemente para computar tags, paths e strings de versão.

O que é command substitution

Ela captura a saída padrão de um comando e a substitui no lugar. A forma moderna é $(command); a forma mais antiga usa backticks. A saída substitui a expressão antes da linha rodar.

Um exemplo simples

Escrever TAG=$(git rev-parse --short HEAD) roda o comando Git e armazena sua saída em TAG. Você pode então usar "$TAG" para rotular um build ou image com o commit de onde veio.

Por que preferir $() a backticks

  • $() aninha de forma limpa, enquanto backticks são desajeitados de aninhar.
  • É mais fácil de ler em linhas longas.
  • As regras de aspas dentro de $() são mais previsíveis.

Colocando o resultado entre aspas

Sempre coloque a substitution entre aspas, como em "$(cmd)", para manter a saída intacta quando ela contém espaços ou quebras de linha. Sem aspas, o shell divide a saída em espaços em branco, o que causa bugs sutis.

Command substitution no CI

Pipelines a usam para derivar valores: um commit SHA para uma tag de image, um timestamp para um nome de artifact, uma versão de um arquivo. Note que o comando roda em um subshell, então uma falha dentro dele pode passar despercebida a menos que você verifique o exit code.

Computando valores em runners gerenciados

Nos runners da Latchkey, command substitution permite que um passo compute um valor uma vez e o reutilize. Coloque resultados entre aspas e verifique que o comando interno teve sucesso, especialmente sob set -e, para que uma substitution com falha não alimente dados vazios adiante.

Principais conclusões

  • Command substitution substitui um comando por sua saída, via $(...).
  • Prefira $() a backticks e sempre coloque o resultado entre aspas.
  • O CI a usa para computar tags, versões e paths a partir da saída de comandos.

Guias relacionados