O alias não aceita argumentos. Ele simplesmente substitui uma string pela outra na sua linha de comando. Não há $@
separado para um alias, portanto, "$@"
não se expande como esperado aqui. Ele se expande como se você digitasse diretamente em sua linha de comando (manualmente):
echo "$@"
(Isso não mostra a divisão exata da palavra, mas não é o ponto).
No entanto, uma função recebe argumentos e possui seu próprio $@
. Não está claro para mim se você queria que o echo
imprimisse seus alias "argumentos". Se assim for, eu faria isso em vez de um alias:
cde() { cd "$@" ; echo "$@" ; }
Ou melhor:
cde() { cd "$@" ; pwd ; }
A diferença está em lidar com vários argumentos, expandir caminhos como ..
etc. Também -L
e -P
opções para pwd
podem ser úteis.
Se você desejar substituir cd
, precisará de command
para evitar o loop infinito (a função poderia se chamar de outra forma):
cd() { command cd "$@" ; pwd ; }