Yanıtlar:
[[
bash ayrılmış kelimedir, bu nedenle aritmetik genişletme gibi özel genişletme kuralları uygulanır, durum böyle değil [
. Ayrıca aritmetik ikili operatör -eq
kullanılır. Bu nedenle kabuk tamsayı ifadesini arar ve ilk öğede metin bulunursa, bunu parametre olarak genişletmeye çalışır. Buna aritmetik genişleme denir ve içinde bulunur 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.
Yani mesela:
[[ hdjakshdka -eq fkshdfwuefy ]]
her zaman doğru dönecek
Ama bu hata döndürecek
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
Ayrıca özyineleme mevcuttur:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
verdim.
[[
ayrılmış bir sözcük değil, çünkü içeride [[ … ]]
olan şey sıradan komut sözdizimi değil, koşullu bir ifade. Koşullu bir ifadede, aritmetik işleçlere yönelik argümanlar -eq
aritmetik değerlendirmeye tabidir.