Skip to main content

ZC4002 - Backtick Command Substitution

Descrição

Use $() em vez de crases (`) para substituição de comando.

Exemplo Problemático

#!/bin/zsh

# Sintaxe antiga com crases
files=`ls -la`

# Difícil de ler com nesting
echo "Diretório: `basename \`dirname \"$PWD\"\``"

Problemas Com Crases

  1. Difícil de aninhar - Precisa escapar crases internas
  2. Visualmente confuso - Difícil distinguir de aspas simples
  3. Depreciado - Considerado legado, embora ainda suportado
  4. Portabilidade - $() é POSIX e mais amplamente recomendado

Solução Correta

Use a sintaxe moderna $():

#!/bin/zsh

# Mais legível
files=$(ls -la)

# Aninhamento claro
echo "Diretório: $(basename $(dirname "$PWD"))"

# Ou com $() aninhado de forma mais clara
current_dir=$(basename "$(dirname "$PWD")")
echo "Diretório: $current_dir"

Correção Automática

O ZshCheck pode converter automaticamente:

zshcheck --fix script.zsh

Antes:

result=`echo hello`

Depois:

result=$(echo hello)

Comparação Visual

SintaxeExemploLegibilidade
Crasesoutput=`cmd`⭐⭐
$()output=$(cmd)⭐⭐⭐⭐⭐
Crases aninhadas `cmd \`inner\ ``
$() aninhado$(cmd $(inner))⭐⭐⭐⭐⭐

Exceções

Crases ainda podem ser úteis em:

  • Sistemas muito antigos (pre-POSIX)
  • Código legado que não pode ser modificado
  • Casos onde compatibilidade com sh antigo é necessária

Para zsh moderno, sempre prefira $().

Referências