ZC4003 - echo with Escape Sequences
Descrição
echo com flags -e ou -E tem comportamento não-portável. Use printf para maior compatibilidade.
O Problema
O comando echo é um dos mais inconsistentes entre sistemas Unix:
- Linux (GNU coreutils) - Suporta
-epara interpretar escapes - macOS (BSD) - Interpreta escapes por padrão,
-Epara desabilitar - POSIX sh - Comportamento não especificado para escapes
Exemplo Problemático
#!/bin/zsh
# Pode funcionar em Linux mas não em macOS
echo -e "Line 1\nLine 2"
# Oposto - funciona em macOS mas não em Linux
echo "Line 1\nLine 2"
Solução Correta
Use printf - é POSIX e portátil:
#!/bin/zsh
# Funciona igual em todos os sistemas
printf "Line 1\nLine 2\n"
# Com variáveis - mais seguro
name="John"
printf "Hello, %s!\n" "$name"
# Múltiplos argumentos
printf "%s: %d\n" "Count" 42
Diferenças Entre echo e printf
| Aspecto | echo | printf |
|---|---|---|
| Portabilidade | ❌ Inconsistente | ✅ POSIX |
| Escapes | Depende do sistema | Sempre suporta |
| Novas linhas | Adiciona automaticamente | Requer \n explícito |
| Formatação | Simples | Completa (como C) |
-- | Alguns echo suportam | Não aplica |
Padrões Comuns com printf
#!/bin/zsh
# String simples
printf "Hello World\n"
# Com variável
user="Alice"
printf "User: %s\n" "$user"
# Número inteiro
count=5
printf "Count: %d\n" "$count"
# Tabulação
printf "Name\tAge\tCity\n"
printf "%s\t%d\t%s\n" "Alice" 30 "NYC"
# Sem nova linha (útil para prompts)
printf "Continue? "
read response
Quando echo é Aceitável
echo é seguro quando:
- Não usa escapes (
\n,\t, etc) - O argumento é uma string literal simples
- O output não precisa ser portável
# Seguro - string simples sem escapes
echo "Hello World"
echo "Script completed"