Я пытаюсь понять логику алгоритма Bash.
Когда я попробовал это, он напечатал «a»:
a=a;[ $a == "a" ] && echo $a
Пока все хорошо.Затем я попробовал следующее, и он снова напечатал «a»:
a=a;[[ $a == "a" ]] && echo $a
Теперь я ввел ошибку, используя арифметическое сравнение:
a=abc;[ $a -eq "abc" ] && echo $a
Я получил сообщение об ошибке, которое имеет смысл:
-bash: [: abc: integer expression expected
Затем я попытался сделать это с двойной скобкой и не получил ошибки, но "abc":
a=abc;[[ $a -eq "abc" ]] && echo $a
Я могу это как-то объяснить (bash пытается быть любезен), но потом я получил кое-что, что озадачивает меня.Если я это сделаю, я получу сообщение об ошибке рекурсии:
a=a;[[ $a -eq "a" ]] && echo $a
-bash: [[: a: expression recursion level exceeded (error token is "a")
Если я использую одиночные скобки, рекурсия не возникает, но существует разумная ошибка "ожидается целочисленное выражение":
a=a;[ $a -eq "a" ] && echo $a
-bash: [: abc: integer expression expected
Это странно.Что Bash пытается сделать в этом «рекурсивном» случае с двойными скобками?Я говорю о:
a=a;[[ $a -eq "a" ]] && echo $a
-bash: [[: a: expression recursion level exceeded (error token is "a")