Este site diz, "As funções do shell são mais rápidas [do que os aliases]. Os aliases são pesquisados após as funções e, portanto, a resolução é mais lenta. Embora os aliases sejam mais fáceis de entender, as funções do Shell são preferidas aos aliases para quase todos os fins . "
Considerando isso (verdadeiro ou não), como as funções do Shell se comparam aos scripts Shell autônomos? Um tem vantagens particulares sobre o outro ou é mais adequado para certos tipos de tarefas?
A principal diferença entre apelidos e funções é que apelidos não aceitam argumentos¹, mas funções sim. Quando você escreve algo como alias l='ls --color'
, l foo
é expandido para ls --color foo
; você não pode pegar foo
na expansão do alias e fazer algo diferente com ele da maneira que você pode fazer com uma função. Veja também Como passar o parâmetro para o alias? .
Os aliases são pesquisados antes das funções : se você tiver uma função e um alias chamado foo
, foo
invoca o alias. (Se o alias foo
está sendo expandido, está temporariamente bloqueado, o que torna coisas como alias ls='ls --color'
trabalhos. Além disso, você pode ignorar um alias a qualquer momento executando \foo
.) Eu não esperaria ver uma diferença mensurável de desempenho.
Funções e scripts autônomos têm recursos semelhantes; aqui estão algumas diferenças que posso pensar:
Algo intermediário entre uma função e um script autônomo é um snippet de script que você lê com source
ou .
construídas em. Como uma função, ela pode modificar o ambiente do Shell e deve ser escrita na linguagem do Shell. Como um script, ele é carregado sempre que é invocado e não antes disso.
¹ Sim, eu sei, isso não se aplica ao tcsh.