Je ne fais pas beaucoup de scripts shell, j'ai donc été un peu surpris de lire la documentationgit submodule
et de voir la syntaxe utilisée dans cette documentation:
Un retour non nul de la commande dans n'importe quel sous-module provoque l'arrêt du traitement. Cela peut être annulé en ajoutant
|| :
à la fin de la commande.
Je devais rechercher || :
un raccourci pour forcer une commande à quitter correctement. Chaque fois que j'ai eu à faire une commande de sortie avec succès, j'ai utilisé || true
. Est || :
considéré comme plus idiomatique?
||:
(sans espace) est également valide dans bash. Il fait la même chose que|| :
ou|| true
.Réponses:
true
n'a pas été construit dans le shell Bourne.:
c'était toujours le cas (c'était le moyen de saisir les commentaires avant d'#
être introduit).Cela, et parce qu'il est plus court type est probablement la principale raison les gens préfèrent
:
plustrue
.Notez une autre différence dans les shells POSIX (pour
bash
, uniquement en mode POSIX): whiletrue
est une commande interne régulière (ne doit même pas être intégrée),:
est une commande spéciale . Cela a quelques implications, dont la plupart n'auront probablement aucun impact dans ce cas particulier:Si une
:
commande échoue, y compris en raison d’une redirection manquée, le shell se ferme. En pratique, cela ne fera probablement pas de différence si vous ne transmettez pas les redirections à:
dans
var=value :
,var
reste défini survalue
après les:
retours, pas dans le cas detrue
:Notez également que
|| true
fonctionne dans les coquilles desrc
etcsh
familles mais pas|| :
(mais ne pas annulerset -e
encsh
).|| :
n'est pas la même chose que:
. Cela signifie ou s'exécute:
autrement (c'est-à-dire si le pipeline précédent échoue).Causerait la coquille de sortie en raison de
set -e
etfalse
a un statut de sortie non nul (échec). L'set -e
effet est annulé si la commande qui renvoie un état de sortie différent de zéro est utilisée comme condition, comme dans:false && :
n'annule queset -e
.false || :
annuleset -e
et définit le statut de sortie sur0
est donc plus idiomatique de dire que nous voulons ignorer un code de sortie d'échec de la commande. La plupart diraient que|| true
c'est plus lisible (traduit plus clairement l'intention).la source
&& :
est génial, y a-t-il des documents ou des lectures supplémentaires à ce sujet? Google me manque pour essayer de trouver ce genre de mots-clés…Généralement, en bash, le côlon
:
ettrue
est équivalent.Je pense que cela dépend du contexte .
Si vous voulez un
return value
, ou uncondition
est toujours vrai, vous devez utilisertrue
mot-clé, cela rendra votre code plus clair et indiquera au spectateur que vous souhaitez souligner la valeur true , c'est-à-dire:ou
Et si vous ne voulez rien faire , ou
NOP
en shell, vous devez utiliser le côlon:
ou
la source
La plupart de ces réponses ne répondent pas à l'utilisation la plus courante de
:
.Premièrement, cette discussion ne concerne aucun shell autre qu'un dérivé de Bourne shell (
sh
). Cela dit, toutes les coquilles dérivés Bourne voirtrue
et:
que la même chose. Les programmeurs étaient encouragés à utiliser à la:
place detrue
, car:
est toujours intégré, alors qu’il existait des cas où iltrue
n’était pas toujours intégré.:
a deux utilisations. Ce n'est pas un synonyme pour#
, mais il a une fonction différente. Lors du débogage de votre script sous aset -x
, les lignes où#
est utilisé sont supprimées par l’analyseur et totalement ignorées, alors que les lignes avec:
sont analysées et évaluées. Ceci est vraiment utile pour le débogage car-x
ces lignes sont affichées et leur valeur après évaluation est affichée. C'est comme mettreprint
dans votre code des déclarations qui ne s'affichent qu'en-x
mode. Soyez prudent avec les valeurs suivantes:
car elles sont du code réel et les effets secondaires peuvent affecter votre programme.la source