回答:
[[
はbash予約語であるため、の場合とは異なり、算術展開などの特別な展開規則が適用され[
ます。算術二項演算子-eq
も使用されます。したがって、シェルは整数式を探し、最初の項目でテキストが見つかった場合、パラメーターとしてそれを展開しようとします。これは算術展開と呼ばれ、に存在し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.
たとえば、次のとおりです。
[[ hdjakshdka -eq fkshdfwuefy ]]
常に真を返します
しかし、これはエラーを返します
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
再帰も利用できます:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
明確にするために、引用から引用まで含めました。
[[
予約語であるのは直接の事実ではありませんが、その中に[[ … ]]
あるのは通常のコマンド構文ではなく、条件式であるためです。条件式では、などの算術演算子への引数-eq
は算術評価の対象となります。