Прежде всего, не имея пробелов вокруг операторов, вы на самом деле тестируете (например)
[ "no=yes" ]
, который будет оцениваться как true (непустая строка).
[...]
выполняет тестирование с использованием внешней тестовой команды [
(предположительно /bin/[
), а [[...]]
- встроенной проверки оболочки (например, bash или ksh).Для теста =
и ==
имеют одинаковое значение.Что в случае встроенного теста ([[...]]
) фактически оценивается на соответствие шаблону: т.е. [[ yeees == y*s ]]
также верно.
((...))
- это арифметическая оценка.=
- это задание, а ==
проверяет равенство.В моем случае (может привести к версии bash) # 5 на самом деле выдает false, если я заранее не установил yes=1
в качестве назначенного возвращаемого значения для оценки ... в этом случае новая переменная с именем no
, поскольку именно это str
указал (решено) на.Для сравнения, это арифметическое сравнение вернет true, если значения обеих переменных равны ... что буквально означает (( no == yes ))
или в синтаксисе теста [[ "$no" -eq "$yes" ]]
.Если ни no
, ни yes
не установлены, сравниваются два 0.