Je suis bien d'accord, mais la raison est que ça ne rentre pas dans les objectifs du shell. Le shell a pour objectif de composer et enchaîner des commandes, et rien que ça, et d'être un outil pour l'utilisateur d'un unix-like (même pas programmeur). Lorsqu'on sent qu'on a besoin de typage, de structures de données plus complexes, de modularité, etc... c'est juste qu'on doit changer de langage, le shell n'est pas fait pour ça, et autant ne rien lui ajouter de tout ça, car ça risquerait de pousser les adeptes du tout-shell (il y en a pour tous les langages) à l'utiliser pour des tâches où il est sous-optimal et non pensé pour, plutôt que d'utiliser un langage vraiment approprié.
La syntaxe est des fois très fragile avec des espaces avant les ; pour écrire les for et les if.
J'imagine que tu parles plutôt des espaces après [ et avant ] ? Parce que avant ou après ; ça m'étonne. D'après la page man de dash :
Lexical Structure
The shell reads input in terms of lines from a file and breaks it up into
words at whitespace (blanks and tabs), and at certain sequences of char-
acters that are special to the shell called ``operators''. There are two
types of operators: control operators and redirection operators (their
meaning is discussed later). Following is a list of operators:
Control operators:
& && ( ) ; ;; | || <newline>
Redirection operators:
< > >| << >> <& >& <<- <>
En gros, le shell coupe les mots aux espaces, retours à la ligne, et opérateurs de contrôle ou redirection, mais pas plus. [ n'est pas un opérateur, en fait, et quand j'ai dit raccourci syntaxique avant, c'est imprécis : [ est un nom de commande, donc il est traité comme le reste des noms : il faut des espaces avant ou après. C'est juste qu'il s'agit d'une commande qui attend ] comme dernier argument et fonctionne pour le reste identiquement à test. Donc il s'agit d'un raccourci, qui améliore la lisibilité des conditions, mais ce n'est pas syntaxique.
On peut aimer ou non l'analyse lexicale du shell, mais elle est vraiment très simple, un simple paragraphe suffisant à la décrire, et si elle paraît surprenante, ce sera probablement seulement pour le programmeur qui s'attend à retrouver des règles différentes auxquelles il est habitué dans d'autres langages, et qui ici seraient des irrégularités.
[^] # Re: Portabilité et forçage
Posté par anaseto . En réponse à la dépêche Mise aux poings sur systemd. Évalué à 4.
Je suis bien d'accord, mais la raison est que ça ne rentre pas dans les objectifs du shell. Le shell a pour objectif de composer et enchaîner des commandes, et rien que ça, et d'être un outil pour l'utilisateur d'un unix-like (même pas programmeur). Lorsqu'on sent qu'on a besoin de typage, de structures de données plus complexes, de modularité, etc... c'est juste qu'on doit changer de langage, le shell n'est pas fait pour ça, et autant ne rien lui ajouter de tout ça, car ça risquerait de pousser les adeptes du tout-shell (il y en a pour tous les langages) à l'utiliser pour des tâches où il est sous-optimal et non pensé pour, plutôt que d'utiliser un langage vraiment approprié.
J'imagine que tu parles plutôt des espaces après
[et avant]? Parce que avant ou après;ça m'étonne. D'après la page man de dash :En gros, le shell coupe les mots aux espaces, retours à la ligne, et opérateurs de contrôle ou redirection, mais pas plus.
[n'est pas un opérateur, en fait, et quand j'ai dit raccourci syntaxique avant, c'est imprécis :[est un nom de commande, donc il est traité comme le reste des noms : il faut des espaces avant ou après. C'est juste qu'il s'agit d'une commande qui attend]comme dernier argument et fonctionne pour le reste identiquement àtest. Donc il s'agit d'un raccourci, qui améliore la lisibilité des conditions, mais ce n'est pas syntaxique.On peut aimer ou non l'analyse lexicale du shell, mais elle est vraiment très simple, un simple paragraphe suffisant à la décrire, et si elle paraît surprenante, ce sera probablement seulement pour le programmeur qui s'attend à retrouver des règles différentes auxquelles il est habitué dans d'autres langages, et qui ici seraient des irrégularités.