Respostas:
[[
é bash word reservada, portanto, regras especiais de expansão, como expansão aritmética, são aplicadas, não como no caso de [
. Também -eq
é utilizado um operador binário aritmético . Portanto, o shell procura expressão inteira e, se o texto for encontrado no primeiro item, ele tenta expandi-lo como parâmetro. É chamado de expansão aritmética e está presente em 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.
Então, por exemplo:
[[ hdjakshdka -eq fkshdfwuefy ]]
sempre retornará verdadeiro
Mas este retornará erro
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
Também está disponível recursão:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
minha resposta para deixar claro.
[[
ser uma palavra reservada, mas porque o que está dentro [[ … ]]
não é uma sintaxe de comando comum, mas uma expressão condicional. Em uma expressão condicional, os argumentos para operadores aritméticos, como -eq
estão sujeitos a avaliação aritmética.