Para tener una idea de lo que está pasando, corre
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
Dado que los $
caracteres están entre comillas dobles (cuando se expanden después de que se expande el alias), son interpretados por el shell. Para que la cita sea correcta, es más fácil poner la definición completa del alias entre comillas simples. Lo que está dentro de las comillas simples es lo que se expandirá cuando se use el alias. Ahora que el argumento de awk
está entre comillas dobles, está claro que necesita barras invertidas antes \"$
.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'
Una expresión útil para comillas simples de una cadena entre comillas simples es que '\''
es más o menos una forma de poner una comilla simple literal en una cadena entre comillas simples. Técnicamente hay una yuxtaposición de una cadena entre comillas simples, una barra invertida entre comillas '
y otra cadena entre comillas simples. La cadena vacía yuxtapuesta ''
al final se puede quitar.
alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
Después de esta larga explicación, una recomendación: cuando es demasiado complicado para un alias, use una función .