matafan a écrit :
Ce que je voulais dire c'est que la remarque
n'a pas lieu d'être, puisqu'il n'y a pas de fork/exec.
|
Non mais il y a probablement un déroutement quelconque et appel d'une sous routine (je fais un parallèle avec le peu d'assembleur que je connais). Mieux vaut un seul déroutement que 4
De plus, tu sais pas ce que fait l'instruction "a" dans "if [ a ] && [ B ] || [ a ] && [ C ]" mais il n'empêche qu'elle est appelée 2 fois et rien que ça c'est déjà dommage.
Maintenant imagine le test suivant (syntaxiquement tout à fait correct)
if [ -z `grep bidule machin |awk '{gros script}'` ] && [ -n "$var1" ] || [ -z `grep bidule machin |awk '{gros script}'` ] && [ -n "$var2" ] |
Si le fichier "machin" est énorme et que le "gros script" est lui-aussi très long, tu imagines les processus inutiles et le temps bouffé pour rien (sans compter le temps pour simplement taper cet immondice 2 fois) ???
if [ -z `grep bidule machin |awk '{gros script}'` -a \( -n "$var1" -o -n "$var2" \) ] |
C'est quand-même plus fin comme test (même s'il y a mieux encore).
Maintenant, entre
if [ $# -gt 4 ] || [ $# -lt 2 ] |
et
if [ $# -gt 4 -o $# -lt 2 ] |
C'est vrai que ça doit pas changer grand chose... mais enseigner la première méthode à qqun qui ne connait pas le shell risque de lui donner de mauvaises habitudes et le mener vers une voie où il ne saura pas écrire autrement un test complexe qu'en répétant les instructions.
Au pire on peut écrire "if [ a ] && \( [ B ] || [ C ] \)" mais puisque les connecteurs "and" et "or" sont déjà inclus dans le test, pourquoi s'en priver ? Laissons le "&&" et "||" aux programmes qui n'ont que ça...
Message édité par Sve@r le 25-01-2006 à 23:13:29
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.