Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Зачем нужна закрывающая квадратная скобка в if-blocks?

Если открывающаяся скобка является синонимом команды test, то у меня возникает вопрос - зачем нужна закрывающаяся скобка?
if [ $a -eq $b ]
В более поздних версиях bash поддерживается конструкция [[...]] (зарезервированное слово). В чем различия?
Почему при использовании [...] и нескольких условий (&&, ||) возникает ошибка, а при использовании конструкции [[...]] ошибки не возникает?
if [ $a -eq $b && $c -eq $d ] - ошибка if [[ $a -eq $b && $c -eq $d ]] - не ошибка
UPD: используется интерпретатор #!/bin/bash. Скрипты формата *.sh


Ответ

информация почерпнута из man bash
начнём с терминологии.
[[ — это compound command (составная команда) [ и test — это просто builtin commands (встроенные команды) составная команда (их список далеко не ограничивается командой [[) характеризуется тем, что её аргументом может быть составное выражение, объединяющее выражения с помощью следующих операторов (перечислены в порядке приоритета вычисления):
( выражение ) — группировка выражений для изменения порядка вычислений/выполнения ! выражение — «не» выражение1 && выражение2 — «и» выражение1 || выражение2 — «или» команда [ не является именно синонимом команды test. синтаксис их вызова несколько отличается, хотя функционально они идентичны:
test выражение [ выражение ] у встроенных команд [ и test есть аналогичные, но чуть отличающиеся синтаксисом, операторы для группировки, отрицания, и логических операций «и/или»:
\( выражение \) — группировка ! выражение — «не» (тут синтаксис идентичен) выражение1 -a выражение2 — «и» выражение1 -o выражение2 — «или»

Комментариев нет:

Отправить комментарий