Les curieux binaires des systèmes Unix
- Sur les systèmes Unix, il existe des fichiers binaires dont le nom est un seul symbole.
- En exécutant la commande
/bin/[, on peut constater l’existence d’un programme nommé[. [ettestpointent vers le même fichier binaire, et les deux commandes remplissent en réalité la même fonction.
Utilisation du programme test et de [
- Le programme
testsert à évaluer des expressions dans le shell. - Il est utilisé pour comparer des chaînes, comparer des nombres, vérifier des conditions sur des fichiers, etc.
testreçoit des arguments, évalue l’expression, puis renvoie 0 si elle est vraie et 1 si elle est fausse.
Pourquoi ces deux commandes existent
- La raison de l’existence simultanée de
testet[n’est pas clairement établie, mais on suppose que c’est pour améliorer la lisibilité. - L’utilisation de
[permet d’exprimer les conditions de manière plus propre qu’avectest. - Lorsqu’on utilise
[, le dernier argument de la commande doit se terminer par].
Différence entre commandes intégrées et binaires externes
- Comme
testet[sont souvent utilisés dans les scripts shell, ils sont implémentés comme commandes intégrées dans la plupart des shells. - Le comportement peut différer selon qu’on utilise une commande intégrée ou un binaire externe, et il peut aussi varier d’un shell à l’autre.
Utilisation de [[ et différences
[[est une extension de Bash qui remplace l’usage de[.- En tant que commande intégrée,
[[peut modifier les règles de base du langage à l’intérieur des expressions. - Lors de comparaisons de chaînes,
[[peut traiter les motifs glob comme des littéraux et produire ainsi des résultats différents.
Choix lors de l’écriture de scripts shell
- Pour écrire des scripts shell portables, il est préférable d’utiliser
[. - Pour un script réservé à Bash,
[[offre davantage de fonctionnalités.
Combiner expressions du shell et expressions test
- Le shell possède ses propres expressions via les opérateurs
!,&&,||. - Il est possible de combiner les expressions de
testet celles du shell en une seule commande.
Avis de GN⁺
Le point le plus important de cet article est que [ et test existent sur les systèmes Unix comme deux commandes différentes accomplissant la même fonction, vraisemblablement pour améliorer la lisibilité et l’efficacité des scripts shell. Cette information peut être utile aux ingénieurs logiciels débutants lorsqu’ils écrivent ou lisent des scripts shell, et elle aide à mieux comprendre le fonctionnement des scripts shell ainsi que les différences entre les divers shells. Ce qui rend cet article intéressant, c’est qu’il montre comment les outils fondamentaux du shell peuvent être utilisés sous différentes formes, tout en mettant en évidence la complexité et la flexibilité de la programmation shell.
1 commentaires
Commentaires sur Hacker News
Remerciements de l’auteur original et proposition de correction du titre
Histoire de la commande "test" du shell Bourne et préférence personnelle
Exemple de condition sans bloc
ifManière de combiner un bloc
ifavec des commandes ordinairesRéflexion sur l’usage des opérations logiques dans la commande
testAvantages de la commande "test" et praticité de "man test"
Attention au comportement avec un seul argument de
[ettestDifférence entre
/bin/[et/bin/testsur Linux et NetBSDPartage d’un lien de blog pour approfondir
test/[/[[et les bizarreries du shellRappel que
[[est spécifique à bash, avec recommandation de l’utiliser si l’on est certain d’être sous bashConfusion autour de l’idée que
[ne ferait pas partie du langage de script bashOpinion tranchée sur le shell et opposition à l’usage de
[