Após essa pergunta sobre a remoção de novas linhas de texto, desejo transformar isso em um alias zsh da seguinte maneira:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
Eu tentei escapar das 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? Suponho que eu poderia transformar isso em um script awk em vez de um apelido zsh, essa é minha melhor opção?
Respostas:
Você poderia usar uma função zsh em vez de um alias. Não há aros para citar.
fonte
striplines filename
:?"$@"
está fazendo?"$@"
sintaxe envia os argumentos das linhas para despertar imperturbável - necessário se, digamos, qualquer um de seus nomes de arquivos contiver espaços:striplines "file 1" "file 2"
enviaria dois nomes de arquivos para despertar.Para ter uma idéia do que está acontecendo, execute
Como os
$
caracteres estão entre aspas duplas (quando são expandidos após a expansão do alias), eles são interpretados pelo shell. Para acertar a citação, é mais fácil colocar toda a definição de alias entre aspas simples. O que há dentro das aspas simples é o que será expandido quando o alias for usado. Agora que o argumento deawk
está entre aspas duplas, fica claro que você precisa de barras invertidas antes\"$
.Um idioma útil para citar uma string entre aspas simples é que
'\''
é praticamente uma maneira de colocar uma aspas simples literal em uma string entre aspas simples. Tecnicamente, há uma justaposição de uma sequência de aspas simples, uma barra invertida'
e outra sequência de aspas simples. A cadeia vazia justaposta''
no final pode ser removida.Após essa longa explicação, uma recomendação: quando for muito complicado para um alias, use uma função .
fonte