case $HOSTNAME in (*q20*) alias a='cd ~/a1';; (*) alias a='cd ~/a99'; esac
Você está recebendo um erro, porque os espaços estão faltando após [[
e porque -z
é testar se uma string específica está vazia. [[
é um recurso não padrão, como ele se comporta depende da versão de bash
. A estrutura case
é POSIX e, como escrita, funcionará em qualquer shell POSIX e em qualquer versão de bash
.
Em geral, também é melhor ficar longe de coisas como cmd1 && cmd2 || cmd3
, pois geralmente ele não faz o que você quer se cmd2
falhar.
Além disso, não vejo sentido em colocar tudo em uma linha. Isso é algo que vai para algum arquivo rc, certo? Então será muito mais legível se em várias linhas.
case $HOSTNAME in
(*q20*) alias a='cd ~/a1';;
(*) alias a='cd ~/a99'
esac
é mais legível e portátil que:
if [[ $HOSTNAME =~ q20 ]]; then
alias a='cd ~/a1'
else
alias a='cd ~/a99'
fi
mais legível (e mais correto) do que:
[[ $HOSTNAME =~ q20 ]] &&
alias a='cd ~/a1' ||
alias a='cd ~/a99'
se mais legível que
[[ $HOSTNAME =~ q20 ]] && alias a='cd ~/a1' || alias a='cd ~/a99'