En bash:
$ type :
: is a shell builtin
$ type true
true is a shell builtin
Parece que son iguales, pero no dan la misma traza del sistema:
$ strace :
strace: :: command not found
$ strace true
execve("/bin/true", ["true"], [/* 82 vars */]) = 0
[snip]
exit_group(0) = ?
Intenté diferir strace bash -c : 2>:.txty strace bash -c true 2>true.txt, pero no pude encontrar ninguna diferencia entre ellos, excepto por las ubicaciones de memoria.
En dash:
$ type :
: is a special shell builtin
$ type true
true is a shell builtin
OK, entonces no son lo mismo. help :y help trueno son muy útiles, y devuelven lo mismo en bashy dash. ¿Hay alguna diferencia práctica entre ellos, excepto que :ahorra tres bytes y hace que los scripts sean menos legibles?