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
- Difícil de aninhar - Precisa escapar crases internas
- Visualmente confuso - Difícil distinguir de aspas simples
- Depreciado - Considerado legado, embora ainda suportado
- 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
| Sintaxe | Exemplo | Legibilidade |
|---|---|---|
| Crases | output=`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 $().