Si tu fais
$ ksh -n 'if [[ 1 -eq 1 ]]; then echo hi; fi'
vous obtenez le message
ksh: warning: line 1: -eq within [[...]] obsolete, use ((...))
comme vous l'avez vu. Maintenant, essayez ceci:
$ ksh -n 'if (( 1 -eq 1 )); then echo hi; fi'
ksh: 1 -eq 1 : arithmetic syntax error
Cela marche:
$ ksh -n 'if (( 1 == 1 )); then echo hi; fi'
N'oubliez pas que le premier message n'est qu'un avertissement. Vous pouvez continuer à utiliser ce formulaire. Je doute qu'il sera supprimé car il casserait trop de scripts existants. Soit dit en passant, cela est accepté sans avertissement:
$ ksh -n 'if [ 1 -eq 1 ]; then echo hi; fi'
L' une des principales raisons qui doublent entre parenthèses préféré est que les opérateurs de comparaison sont les plus familiers <
, <=
, ==
, etc., (au moins par rapport aux autres langues).
Les parenthèses doubles fonctionnent également dans Bash et zsh. Une forme connexe, la sous-station arithmétique, fonctionne dans chacun d'eux, plus elle est spécifiée par POSIX.
$ a=$((3 * 4))
Korn, Bash et Z peuvent également procéder de cette façon:
$ (( a = 3 * 4 ))
Même si Dash, comme exemple de shell POSIX, ne prend pas en charge les comparaisons entre parenthèses doubles dans le formulaire if (( ... ))
, vous pouvez toujours les faire en utilisant la substitution arithmétique, mais le résultat est le contraire de ce que vous attendez (cela est également vrai pour les autres).
$ echo $(( 1 == 1 )); (( 1 == 1 )); echo $? # in Dash, use true instead of the second statement
1
0
$ echo $(( 1 == 2 )); (( 1 == 2 )); echo $? # in Dash, use false instead of the second statement
0
1