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 awk
jest 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 .