• [^] # Re: Portabilité et forçage

    Posté par . En réponse à la dépêche Mise aux poings sur systemd. Évalué à 4.

    Pour l’égalité c’est pas = ou == mais -eq, mais attention seulement pour les entiers parce que sinon c’est bien == pour les chaines de caractères. Hé nan en fait on utilise pas && ou and et || ou or, on utilise -a et -o. Et si on utilise pas la syntaxe des crochets il faut mettre test devant,

    Oui, c'est bien là le point important à remarquer : c'est que [] n'est au fond qu'un raccourci syntaxique pour test, et que donc pour être cohérent avec le reste de la syntaxe du shell, les -a, -o, etc... sont juste des options de test, c'est peut-être surprenant par rapport à d'autres langages, mais ça reste cohérent au niveau du shell où la brique de base est la commande, parce qu'ici le reste ce sont des arguments à test, pas des expressions. Utiliser des symboles aurait été une irrégularité du langage.

    Pour composer et enchaîner des commandes par contre on utilise des symboles comme &&, ce qui correspond à l'usage traditionnel dans d'autres langages pour enchaîner des expressions avec évaluation conditionnelle par exemple.

    En fait, le seul point non cohérent dans ce que tu cites c'est d'utiliser des symboles pour l'égalité des chaînes, j'imagine que c'est juste que -eq et compagnie étaient déjà pris. D'un autre côté, ça ne porte pas vraiment à confusion car l'égalité de deux commandes n'aurait pas de sens, et le seul truc dommage c'est qu'inverser les symboles pour entiers et chaînes aurait été plus intuitif.

    Et puis si on veut exécuter un truc pour le mettre dans une variable il faut utiliser les accents grave, mais sauf que maintenant il faut utiliser $(), à moins que ça non plus ça ne marche pas sur tous les shells?

    Je pense que oui, après je n'ai pas lu en détail le standard, mais ça marche même avec dash. D'ailleurs, dit en passant, la page man de dash est une très bonne introduction au shell par rapport aux pages mans d'autres shells plus conséquent.

    mais attends est-ce que la syntaxe crochet elle fonctionne avec /bin/sh?

    Celle avec des crochets [...] simples crochets oui, celle avec [[...]] non (elle n'a d'ailleurs plus rien à voir avec test).