Historiquement, les interpréteurs de commandes Bourne n'avait pas true
et false
que les commandes intégrées. true
a été plutôt simplement un alias :
, et false
comme let 0
.
:
est légèrement meilleure pour la portabilité à l'ancienne Bourne dérivé de coquillages. Comme exemple simple, considérons ayant ni l' !
opérateur de pipeline, ni l' ||
liste de l'opérateur (comme ce fut le cas pour certaines de ses anciennes Bourne coquilles). Cela laisse à l' else
clause de l' if
déclaration que le seul moyen pour la ramification, basé sur le statut de sortie:
if command; then :; else ...; fi
Depuis if
requiert un non-vide then
de la clause, et les commentaires ne comptent pas non vide, :
sert comme un no-op.
Aujourd'hui, dans un contexte moderne, vous pouvez généralement utiliser :
ou true
. Les deux sont spécifiés par la norme POSIX, et certains trouvent true
plus facile à lire. Il existe cependant une différence intéressante: :
est un soi-disant POSIX spécial intégré, alors que true
est un classique intégré.
Spécial built-ins doivent être intégrés dans la coque; De built-ins ne sont "généralement", construite en, mais il n'est pas strictement garanti. Il ne devrait pas être un programme régulier nommé :
avec la fonction d' true
dans le CHEMIN d'accès de la plupart des systèmes.
-
Probablement la différence la plus fondamentale est que, avec une spéciale de built-ins, toute variable définie par la intégré- même dans l'environnement lors de la commande simple de l'évaluation - persiste après la commande est terminée, comme en témoigne ici à l'aide de ksh93:
$ unset x; ( x=hi :; echo "$x" )
hi
$ ( x=hi true; echo "$x" )
$
Notez que Zsh ignore cette exigence, tout comme GNU Bash, sauf en cas de fonctionnement en mode de compatibilité POSIX, mais tous les autres grands "POSIX sh" dérivée " des coquilles d'observer ce y compris le tableau de bord, ksh93, et mksh.
-
Une autre différence est que la pratique régulière de built-ins doivent être compatibles avec exec
- démontré ici avec Bash:
$ ( exec : )
-bash: exec: :: not found
$ ( exec true )
$
POSIX aussi précise que :
peut être plus rapide que l' true
, mais c'est bien sûr une mise en œuvre spécifique de détail.