Você pode usar uma função zsh em vez de um alias. Não há aros de citação para saltar.
striplines() {
awk '... awk body "with quotes" ...' "$@"
}
Seguindo a esta pergunta sobre a remoção de novas linhas do texto, quero transformar isso em um alias zsh da seguinte forma:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
Eu tentei escapar as aspas dentro do script awk, mas estou recebendo este erro:
awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted
(o arquivo é chamado bspsrobustness
)
Existe uma maneira de fazer o que eu quero? Eu suponho que eu poderia transformar isso em um script awk ao invés de um apelido zsh, essa é a minha melhor opção?
Para ter uma ideia 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 depois que o alias é expandido), eles são interpretados pelo shell. Para obter a citação correta, é mais fácil colocar a definição de alias inteira entre aspas simples. O que está 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 de \"$
.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
);}"'
Um idioma útil para aspas simples de uma cadeia de aspas simples é que '\''
é praticamente uma maneira de colocar uma aspa simples literal em uma cadeia de aspas simples. Tecnicamente, há uma justaposição de uma string entre aspas simples, uma string com aspas invertidas '
e outra string entre aspas simples. A string vazia justaposta ''
no final pode ser removida.
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
Após essa longa explicação, uma recomendação: quando é muito complicado para um alias, use uma função .