Réponses:
[[
est un mot réservé bash, donc des règles d'expansion spéciales telles que l'expansion arithmétique sont appliquées, pas comme dans le cas avec [
. Un opérateur binaire arithmétique -eq
est également utilisé. Par conséquent, le shell recherche une expression entière et si du texte est trouvé au premier élément, il essaie de le développer en tant que paramètre. Elle est appelée expansion arithmétique et est présente dans man bash
.
RESERVED WORDS
Reserved words are words that have a special meaning to the shell.
The following words are recognized as reserved
…
[[ ]]
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of
the conditional expression expression. Expressions are
composed of the primaries described below under CONDITIONAL
EXPRESSIONS. Word splitting and pathname expansion are not
performed on the words between the [[ and ]]; tilde
expansion, parameter and variable expansion, >>>_arithmetic
expansion_<<<, command substitution, process substitution, and
quote removal are performed.
Arithmetic Expansion
…
The evaluation is performed according to the rules listed below
under ARITHMETIC EVALUATION.
ARITHMETIC EVALUATION
…
Within an expression, shell variables may also be referenced
by name without using the parameter expansion syntax.
Ainsi, par exemple:
[[ hdjakshdka -eq fkshdfwuefy ]]
reviendra toujours vrai
Mais celui-ci renverra une erreur
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
La récursivité est également disponible:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
à ma réponse pour que ce soit clair.
[[
s'agit d'un mot réservé, mais parce que ce qu'il contient [[ … ]]
n'est pas une syntaxe de commande ordinaire, mais une expression conditionnelle. Dans une expression conditionnelle, les arguments des opérateurs arithmétiques tels que -eq
sont soumis à une évaluation arithmétique.