Não há diferença real no comportamento. Ambos os comandos não fazem nada e saem com um status de sucesso. :
enfatiza não fazer nada; true
enfatiza o status de sucesso.
strace true
funciona porque true
é um shell interno e um comando externo ( /bin/true
); :
é apenas um shell embutido (não há /bin/:
- embora possa haver, e provavelmente estava em sistemas Unix muito antigos). No bash, tente
type -a :
type -a true
As razões pelas quais ambos existem são históricas. Se bem me lembro, alguns shells muito antigos não tinham uma sintaxe de comentário, então o comando do-nothing :
foi usado no lugar.
Existe alguma diferença interna em dash
. Olhando através da fonte, disponível em git: //git.kernel.org/pub/scm/utils/dash/dash.git, mostra alguns caminhos de código diferentes em eval.c
, mas eu não consegui produzir nenhum visivelmente comportamento diferente da palavra special
na saída de type :
.