Seu echo
é um daqueles que interpreta escapes de barra invertida . Um \n
significa uma nova linha, então você consegue exatamente isso. A última barra invertida vem como está, pois \s
não é um código de escape válido.
Make executa os comandos através de um shell, usando /bin/sh
por padrão, e no Debian isso é traço. O echo
incorporado do Dash processa barras invertidas. Bash não faz isso. (E nem o /bin/echo
externo no Debian, nem que isso importe, a menos que você execute explicitamente /bin/echo
).
Sua melhor aposta é usar printf
explicitamente, pelo menos é seguro, pois sempre processa escapes com barra invertida. O abaixo deve sempre fazer a mesma coisa, o \n
no início produz uma barra invertida real e um n
, o \n
depois produz uma nova linha para terminar a linha.
foo:
printf '\newcommand\n' > foo
(ou, se você quiser evitar o processamento de barras invertidas, use printf "%s" '\newcommand'
)
Veja a pergunta Por que printf é melhor que echo? para mais detalhes sobre echo
gotchas.