GNU/Linux >> Tutoriels Linux >  >> Linux

À quoi sert le Colon Builtin ':' ?

J'ai piraté beaucoup de scripts shell, et parfois les choses les plus simples me déconcertent. Aujourd'hui, j'ai rencontré un script qui utilisait largement le : (deux-points) bash intégré.

La documentation semble assez simple :

: (a colon)  
     : [arguments]  

Ne faites rien d'autre que développer des arguments et effectuer des redirections. Le statut de retour est zéro.

Cependant, je n'ai auparavant vu cela utilisé que dans des démonstrations d'expansion de shell. Le cas d'utilisation du script que j'ai rencontré utilisait largement cette structure :

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi

Il y avait en fait des centaines de greps, mais ils sont juste plus ou moins pareils. Aucune redirection d'entrée/sortie n'est présente autre que la structure simple ci-dessus. Aucune valeur de retour n'est vérifiée ultérieurement dans le script.

Je lis ceci comme une construction inutile qui dit "ou ne rien faire". À quoi pourrait servir la fin de ces greps avec « ou ne rien faire » ? Dans quel cas cette construction entraînerait-elle un résultat différent de la simple suppression du || : de toutes les instances ?

Réponse acceptée :

Il apparaît le : s dans votre script sont utilisés à la place de true . Si grep ne trouve pas de correspondance dans le fichier, il renverra un code de sortie différent de zéro ; comme jw013 le mentionne dans un commentaire, si errexit est défini, probablement par -e sur la ligne shebang, le script se fermerait si l'un des grep s ne parviennent pas à trouver une correspondance. De toute évidence, ce n'est pas ce que l'auteur voulait, alors il a ajouté || : pour que le statut de sortie de cette commande composée particulière soit toujours zéro, comme le plus courant (selon mon expérience) || true /|| /bin/true .


Linux
  1. Que signifie `:-` dans un script shell ?

  2. Que fait Rackspace dans le cloud ?

  3. Quel est le but du groupe "roue" sous Linux

  4. Quel est le but du fichier .bashrc sous Linux

  5. Que signifie le « rc » dans « .bashrc », etc. ?

Que fait l'appel système brk() ?

Que signifie set -e dans un script bash ?

À quoi sert l'autorisation d'exécution ?

Que fait ce script sh s'il est exécuté ?

Que fait le -e dans un bash shebang ?

quelle est la signification de 1 à la fin du script awk