Como faço para lidar com várias aspas em um alias (para bash ou zsh)

4

Estou usando o zsh e estou tentando usar o python como uma simples calculadora. Estou muito familiarizado com o Python, mas parece que o alias (ou função) não funciona corretamente.

Até agora eu tenho:

pycalc() {
  python -c "print '$@'"
}
alias p=pycalc

Não importa o que eu faça, ele retorna zsh: no matches found: 123*123 (123 * 123 é o problema de matemática).

Alguma ideia ???

    
por AtHeartEngineer 19.06.2014 / 22:48

2 respostas

1

Bash
Adicione o seguinte ao .bashrc

pycalc() {
  python -c "print \"%f\" % float($@)"
}
alias p=pycalc

Você pode anexá-lo com o comando echo.
Uma linha:

echo -e 'pycalc() {\n  python -c \"print \\"%f\\" % float($@)\"\n}\nalias p=pycalc' >> .bashrc

Multilinha:

echo -e 'pycalc() {
  python -c \"print \\"%f\\" % float($@)\"
}
alias p=pycalc' >> .bashrc

Agora você pode usar p

$ pycalc 12+12
24.000000
$ pycalc 12*12
144.000000
$ p 12+12
24.000000
$ p 12*12
144.000000

Como Michael Righi observou em sua resposta, se você tiver um arquivo como 12 * 12, ele será correspondido por 12 * 12, então você pode querer colocá-lo entre aspas duplas. Você também pode colocá-lo entre aspas simples. Sua solução também funciona para o bash.

    
por 19.06.2014 / 23:43
4

zsh

Adicione isto ao .zshrc:

pycalc() {
  python -c "print $@"
}
alias p=pycalc

No seu shell Z, use-o da seguinte forma:

$ p 12+12
24
$ p "12*12"
144

Observe que você precisa das aspas duplas quando a instrução contém um caractere globbing, como o asterisco.

Ou, você pode desativar a globalização para esse alias:

pycalc() {
  python -c "print $@"
}
alias p='noglob pycalc'

Isso elimina a necessidade das aspas duplas ao usá-lo:

$ p 12+12
24
$ p 12*12
144
    
por 20.06.2014 / 04:12