Para ter uma idéia do que está acontecendo, execute
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
Como os $
caracteres estão entre aspas duplas (quando são expandidos após a expansão do alias), eles são interpretados pelo shell. Para acertar a citação, é mais fácil colocar toda a definição de alias entre aspas simples. O que há dentro das aspas simples é o que será expandido quando o alias for usado. Agora que o argumento de awk
está entre aspas duplas, fica claro que você precisa de barras invertidas antes \"$
.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'
Um idioma útil para citar uma string entre aspas simples é que '\''
é praticamente uma maneira de colocar uma aspas simples literal em uma string entre aspas simples. Tecnicamente, há uma justaposição de uma sequência de aspas simples, uma barra invertida '
e outra sequência de aspas simples. A cadeia vazia justaposta ''
no final pode ser removida.
alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
Após essa longa explicação, uma recomendação: quando for muito complicado para um alias, use uma função .