Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Syntaxe de test

3 réponses
Avatar
Lie Algebra
Bonjour,

dans un script bash,j'utilise les syntaxes suivantes (au départ de façon
totalement intuitive) :
- [[ -z "N=$(command 2> /dev/null)" ]]
- [[ "N=10" -eq "10" ]]


De façon générale, est-ce que des affectations encapsulées dans des
tests étaient bien régulières et si ca ne pouvait pas soulever de
problème quelconque ?

3 réponses

Avatar
Stephane Chazelas
2007-05-24, 10:04(+02), Lie Algebra:
Bonjour,

dans un script bash,j'utilise les syntaxes suivantes (au départ de façon
totalement intuitive) :
- [[ -z "N=$(command 2> /dev/null)" ]]
- [[ "N" -eq "10" ]]


De façon générale, est-ce que des affectations encapsulées dans des
tests étaient bien régulières et si ca ne pouvait pas soulever de
problème quelconque ?


[[ ... ]] n'est pas "test" et n'est pas standard.

[[ -z "N=$(command 2> /dev/null)" ]]

ne fait pas d'affectation [[ -z "N=whatever" ]] ne sera jamais
true vu que "N=" n'est pas la chaine vide.

[[ "N" -eq "10" ]]

La, il y aura probablement affectation avec bash. N etant une
expression arithemetique. Mais, quitte a etre bash specifique,
pour les comparaison arithmetiques, il vaut mieux utiliser
((...)): (( (N = 10) == 10 ))

La syntaxe standard pour les tests (dans les scripts sh Unix, je
ne vois pas l'interet d'ecrire des scripts bash) est avec la
commande "[".

[ "$N" -eq 10 ]

[ "$((N))" -eq 10 ]

est censé etre standard, mais ca n'a ete clarifié par POSIX/Unix
que tres recemment, donc certains shells ne le supportent pas
(des descendant de ash principalement).

Des regles d'or:

- eviter une syntaxe specifique d'une version specifique d'un
shell specifique pour les scripts (a moins que ce ne soient des
scripts de customisation de ton shell interactif).

- privilegier lisibilité sur compacticité.

N
[ "$N" -eq 10 ]

--
Stéphane

Avatar
Lie Algebra
Stephane Chazelas wrote:

[[ ... ]] n'est pas "test" et n'est pas standard.



Merci pour ces précisions, mais finalement, qu'est [[ ?

Avatar
Lie Algebra
Stephane Chazelas wrote:

[[ ... ]] n'est pas "test" et n'est pas standard.



Merci pour ces précisions, et j'avoue que j'utilise presque
systématiquement [[, pour des scripts personnels ou la portabilité n'a
pas vraimment d'importance, mais par curiosité, qu'est [[ ?