27 mars 2025

Migration, évolution de mksh, comportement de la commandes de test

Les commandes de test avec les opérateurs AND et OR suivants [ condition1 -a condition2 ] et  [ condition1 -o condition2 ] peuvent ne pas être interprétées de la même manière en fonction de la version de mksh.

Avec l'ancienne machine :

hr9@srv001:/home/adm/hr9> echo "$KSH_VERSION"
@(#)MIRBSD KSH R39 2009/08/01
hr9@srv001:/home/adm/hr9> VAR1=""
hr9@srv001:/home/adm/hr9> VAR2=""
hr9@srv001:/home/adm/hr9> [ ! "${VAR1}" -a "${VAR2}" ] && echo "Erreur"
<Pas d'erreur>

Avec la nouvelle machine

hr9@srv002:/home/adm/hr9> echo "$KSH_VERSION"
@(#)MIRBSD KSH R56 2018/01/14
hr9@srv002:/home/adm/hr9> VAR1=""
hr9@srv002:/home/adm/hr9> VAR2=""
hr9@srv002:/home/adm/hr9> [ ! "${VAR1}" -a "${VAR2}" ] && echo "Erreur"
Erreur

Consigne :
  • Ne pas utiliser dans les tests les opérateurs "-a" (AND) et "-o" (OR)

Préférer les syntaxes : 
  • pour AND : [ condition1 ] && [ condition2 ]
  • pour OR : [ condition1 ] || [ condition2 ]
ou
  • pour AND : [[ condition1 && condition2 ]]
  • pour OR : [[ condition1 || condition2 ]]
Et les regroupements :
[[ (condition1 && condition2) || condition3 ]]

Attention aux autres subtilités de l'opérateur [[ ... ]] (opérateurs numériques < == >, globalisation ... )

Aucun commentaire:

Enregistrer un commentaire