#!/bin/bash
VALUE=10
if [[ VALUE -eq 10 ]]
then
echo "Yes"
fi
驚いたことに、これは「はい」を出力します。 [[$ VALUE -eq 10]]
が必要になると思っていました 。 CONDITIONAL EXPRESSIONS
をスキャンしました man bash
のセクション 、しかし私はこの振る舞いを説明するものを見つけられませんでした。
承認された回答:
[[コード> は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 ]]
常にtrueを返します
しかし、これはエラーを返します
$ [[ 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")