Чтобы понять, что происходит, запустите
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
Поскольку $
символы заключены в двойные кавычки (когда они раскрываются после раскрытия псевдонима), они интерпретируются оболочкой. Чтобы получить правильное цитирование, проще поместить все определение псевдонима в одинарные кавычки. Внутри одинарных кавычек есть то, что будет раскрыто при использовании псевдонима. Теперь, когда аргумент awk
обернут в двойные кавычки, ясно, что вам нужно использовать обратную косую черту \"$
.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'
Полезная идиома для одинарных кавычек в строке в одинарных кавычках заключается в том, что '\''
это в значительной степени способ поместить буквальную одинарную кавычку в строку в одинарных кавычках. Технически существует сопоставление строки в одинарных кавычках, обратной косой черты '
и другой строки в одинарных кавычках. Сопоставленная пустая строка ''
в конце может быть удалена.
alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
После этого длинного объяснения, рекомендация: когда это слишком сложно для псевдонима, используйте функцию .