Aby dowiedzieć się, co się dzieje, biegnij
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
Ponieważ $znaki są w podwójnych cudzysłowach (gdy są rozwijane po rozwinięciu aliasu), są one interpretowane przez powłokę. Aby uzyskać prawidłowe cytowanie, łatwiej jest umieścić całą definicję aliasu w pojedynczych cudzysłowach. W pojedynczych cudzysłowach znajduje się to, co zostanie rozwinięte, gdy użyty zostanie alias. Teraz, gdy argument argumentu awkjest otoczony podwójnymi cudzysłowami, jasne jest, że potrzebujesz wcześniej odwrotnych ukośników \"$.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'
Przydatnym idiomem pojedynczego cudzysłowu jest ciąg znaków, który '\''jest dosłownie sposobem na umieszczenie dosłownego pojedynczego cudzysłowu w ciągu pojedynczego cudzysłowu. Technicznie istnieje zestawienie łańcucha pojedynczego cudzysłowu, cudzysłowu odwrotnego 'i innego łańcucha pojedynczego cudzysłowu. Zestawiony pusty ciąg ''na końcu można usunąć.
alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
Po tej długiej wyjaśnienia, zalecenie: gdy jest zbyt skomplikowane dla aliasu, użyj funkcji .