Зачем нужны круглые скобки ( EXPRESSION ) в утилите test?
И непонятно, нужно ли выражение обязательно заключать в круглые скобки. Вроде работает и без них. Но тогда зачем нужны круглые скобки?
А если будут составные условия (-o, -a) то тогда нужно писать каждое выражение в круглых скобках или нет?

Xintrea ★★★★★
30.01.23 10:38:21 MSK
- Ответить на это сообщение
- Ссылка

непонятно, нужно ли выражение обязательно заключать в круглые скобки.
Нет, конечно, никто тебя не обязывает.
Вроде работает и без них. Но тогда зачем нужны круглые скобки?
Для группировки операций, ну. Как в школьной алгебре, там тоже без них работает, пока приоритет операций совпадает с твоей задумкой.
А если будут составные условия (-o, -a) то тогда нужно писать каждое выражение в круглых скобках или нет?
Нет, просто учитывай, что
- у -a приоритет выше
- -a и -o, ЕМНИП, непортабельны, а судя по тому, что ты используешь test вместо [[, тебя это волнует.
t184256 ★★★★★
( 30.01.23 10:48:28 MSK )
Последнее исправление: t184256 30.01.23 10:48:50 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от t184256 30.01.23 10:48:28 MSK

-a и -o, ЕМНИП, непортабельны, а судя по тому, что ты используешь test вместо [[, тебя это волнует.
Меня волнует то, что в man использование && и || только вскольз в примечании написано:
NOTE: Binary -a and -o are inherently ambiguous. Use 'test EXPR1 && test EXPR2' or 'test EXPR1 || test EXPR2' instead.
А в info почему-то вообще написано что нужно пользоваться примитивами bash:
Note it’s preferred to use shell logical primitives rather than these logical connectives internal to ‘test’, because an expression may become ambiguous depending on the expansion of its parameters. For example, this becomes ambiguous when ‘$1’ is set to ‘'!'’ and ‘$2’ to the empty string ‘''’: test "$1" -a "$2" and should be written as: test "$1" && test "$2"
— здесь test с -a заменено на два вызова test.
То есть, вообще нигде однозначно не написано что в test есть поддержка && и ||.
Xintrea ★★★★★
( 30.01.23 12:19:09 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Xintrea 30.01.23 12:19:09 MSK

Потому что в test нет поддержки && и || 🙂 Это команды самого shell.
Aceler ★★★★★
( 30.01.23 12:20:53 MSK )
- Ответить на это сообщение
- Ссылка
На случай если вдруг кто-то не знает (а вдруг), то [ expression ] и [[ expression ]] немного отличаются. Хотя и то и то про проверку условий. И лучше использовать именно двойные скобки [[ expression ]] , если интерпретатор позволяет.
Kroz ★★★★★
( 30.01.23 12:51:05 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Kroz 30.01.23 12:51:05 MSK

На случай если вдруг кто-то не знает (а вдруг), то [ expression ] и [[ expression ]] немного отличаются. Хотя и то и то про проверку условий. И лучше использовать именно двойные скобки [[ expression ]], если интерпретатор позволяет.
Про синтаксис условий в Bash вот так вот двумя предложениями не говорят.
Я себе сделал вот такую портянку (с учетом данного обсуждения):
Xintrea ★★★★★
( 30.01.23 13:29:48 MSK ) автор топика
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от Xintrea 30.01.23 13:29:48 MSK

Я себе сделал вот такую портянку (с учетом данного обсуждения): Синтаксис условий в BASH скриптах — главные особенности
Какой безумец придумал завершать блок условия оператором fi — это тема для отдельного исторического исследования. fi, как многим понятно, это if, только наоборот. То же самое было сделано для управляющей конструкции case … esac. Логично было бы и другие конструкции завершать их написанием задом-наперед, например цикл for завершать rof, цикл while завершать elihw. Хорошо, что с таким решением решили вовремя завязать и, как минимум, не продолжили эту странную традицию. А fi и case остались как анахронизм, свидетельствующий о том, что авторы Bash были большими оригиналами.
if fi и тому подобное обычное дело в работах по теоретическому программмированию.
Psilocybe ★★★★
( 30.01.23 14:07:20 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от Xintrea 30.01.23 13:29:48 MSK

Все циклы начинаются на do и заканчиваются на done. If и case, соответственно, нет.
Всё логично и понятно.
Aceler ★★★★★
( 30.01.23 14:12:31 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от Psilocybe 30.01.23 14:07:20 MSK

if fi и тому подобное обычное дело в работах по теоретическому программмированию.
Ага, поэтому эту дичь надо было тащить в реальный язык.
Xintrea ★★★★★
( 30.01.23 14:29:03 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от Psilocybe 30.01.23 14:07:20 MSK
Какой безумец придумал завершать блок условия оператором fi
Это он ещё с m4 не сталкивался (формат конфигов sendmail), где в конце каждой строки нужно писать dnl — это аналог точки с запятой в некоторых современный языках. Вот что курил создатель m4 я сам хотел бы узнать.
Kroz ★★★★★
( 30.01.23 14:29:58 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Arduino.ru
Фигурные скобки <> (также называются просто «скобки») – важный элемент языка программирования С. Они используются в нескольких различных конструкциях, приведенных ниже, и это может иногда сбивать с толку начинающих.
Открывающая скобка “” должна всегда сопровождаться закрывающей скобкой “>”. Это условие, известное как парность (симметричность) фигурных скобок. Arduino IDE (интегрированная среда разработчика) включает подходящий инструмент для проверки парности скобок. Достаточно выделить скобку, или даже поставить курсор сразу же за скобкой, как будет подсвечена её логическая пара.
Сейчас эта возможность работает с ошибкой, так как IDE часто ищет (некорректно) скобку в тексте, который «закомментирован».
Начинающие программисты или программисты, перешедшие на Си с Бейсика, часто считают использование фигурных скобок сбивающим с толку или пугающим. В конце концов, одни и те же фигурные скобки заменяют оператор RETURN в подпрограммах (функциях), оператор ENDIF в условных циклах и оператор NEXT в циклах FOR.
Поскольку использование фигурных скобок столь многогранно, хорошей практикой программирования будет печатать закрывающую фигурную скобку сразу после того, как напечатана открывающая скобка, когда вставляется конструкция, для которой нужно использовать фигурные скобки. Затем возвращаем курсор в позицию между фигурными скобками и начинаем вводить операторы. Ваши скобки всегда будут парными и не лишат вас душевного равновесия.
Непарные скобки могут часто приводить к скрытым, непонятным ошибкам компиляции, которые сложно отследить в большой программе. Из-за их разного использования, скобки также невероятно важны в синтаксической правильности программы и перемещение скобки на одну или две строки часто приводят к значительному воздействию на логику программы.
Основные способы использования фигурных скобок
Функции
void НазваниеФункции(тип данных аргумента)
Циклы
while (логическое выражение)
do < оператор(ы) >while (логическое выражение);
for (инициализация; условие окончания цикла; приращения цикла)
Условные операторы
if (логическое выражение) < оператор(ы) >else if (логическое выражение) < оператор(ы) >else
Зачем нужны фигурные скобки «< >» в обозначении промежутков
Как я понимаю они нужны для обозначения отдельных точек-решений, т. е. например ответ точки 2 и 7 + интервал от 4 до 5, значит это будет обозначаться x є <2;7>u (4;5) (не нашел знака объединения, так что «u»)?2;7>
Голосование за лучший ответ
Фигурные скобки используются в математике для обозначения операции взятия дробной части; приоритета операций, как третий уровень вложенности (после круглых и квадратных скобок); для обозначения множеств.
Фигурные скобки используются в математике для обозначения операции взятия дробной части; приоритета операций, как третий уровень вложенности (после круглых и квадратных скобок); для обозначения множеств.
АСВысший разум (145686) 3 года назад
Не пори чушь, неуч
Означают множество из конечного количества элементов ммммлять
— множество из чисел 2 и 7
не «промежуток», а «множество».
Для решения заданий в математике используются три вида скобок: ( ), [ ], < >. Реже встречаются скобки такого вида ] и [, называемые обратными, или < и >, то есть в виде уголка. Их применение всегда парное, то есть имеется открывающаяся и закрывающаяся скобка в любом выражении, тогда оно имеет смысл . скобки позволяют разграничить и определить последовательность действий.
Скобки для указания порядка выполнения действий
Основное предназначение скобок – указание порядка выполняемых действий. Тогда выражение может иметь одну или несколько пар круглых скобок. По правилу всегда выполняется первым действие в скобках, после чего умножение и деление, а позже сложение и вычитание.
Рассмотрим на примере заданное выражение. Если дан пример вида 5+3-2, тогда очевидно, что действия выполняются последовательно. Когда это же выражение записывается со скобками, тогда их последовательность меняется. То есть при (5+3)-2 первое действие выполняется в скобках. В данном случае изменений не будет. Если выражение будет записано в виде 5+(3-2), тогда в начале производятся вычисления в скобках, после чего сложение с числом 5. На исходное значение в этом случае оно не повлияет.
Рассмотрим пример, который покажет, как при изменении положения скобок может измениться результат. Если дано выражение 5+2·4, видно, что вначале выполняется умножение, после чего сложение. Когда выражение будет иметь вид (5+2)·4, то вначале выполнится действие в скобках, после чего произведется умножение. Результаты выражений будут отличаться.
Выражения могут содержать несколько пар скобок, тогда выполнения действий начинаются с первой. В выражении вида (4+5·2)−0,5:(7−2):(2+1+12) видно, что первым делом выполняются действия в скобках, после чего деления, а в конце вычитание.
Существуют примеры, где имеются вложенные сложные скобки вида 4·6-3+8:2 и 5·(1+(8-2·3+5)-2))-4. Тогда начинается выполнение действий с внутренних скобок. Далее производится продвижение к внешним.
Пример 3
Если имеется выражение 4·6-3+8:2, тогда очевидно, что в первую очередь выполняются действия в скобках. Значит, следует отнять 3 от 6, умножить на 4 и прибавить 8. В конце следует разделить на 2. Только так можно получить верный ответ.
На письме могут быть использованы скобки разных размеров. Это делается для удобства и возможности отличия одной пары от другой. Внешние скобки всегда большего размера, чем внутренние. То есть получаем выражение вида 5-1:2+12+3-13·2·3-4. Редко встречается применение выделенных скобок (2+2·(2+(5·4−4)))·(6:2−3·7)·(5−3) или применяют квадратные, например, [3+5·(3−1)]·7 или фигурные :[3+5+6:(5−2−1)].
Перед тем, как приступить к решению, важно правильно определить порядок действий и разобрать все необходимые пары скобок. Для этого следует добавлять разные виды скобок или менять их цвет. Пометка скобки другим цветом удобна для решения, но занимает много времени, поэтому на практике чаще всего применяют круглые, фигурные и квадратные скобки.
Отрицательные числа в скобках
Если необходимо изобразить отрицательные числа, тогда применяют круглые скобки в выражении. Такая запись, как 5+(−3)+(−2)·(−1), 5+-23, 257-5+-673·(-2)·-3,5 предназначена для того, чтобы упорядочить отрицательные числа в выражении.
Скобки не ставятся для отрицательного числа того, когда оно располагается в начале любого выражения или дроби. Если имеем пример вида −5·4+(−4):2, то очевидно, что знак минуса перед 5 можно не заключать в скобки, а при 3-0,4-2,2·3+7+3-1:2 число 2,2 записано вначале, значит скобки также не нужны.
Зачем нужны круглые скобки в MySQL?
Есть вопрос по MySQL. Про круглые скобки в справочниках написано это: круглые скобки используются для задания порядка вычислений в выражении. Например:
mysql> SELECT 1+2*3; -> 7 mysql> SELECT (1+2)*3; -> 9
Плюс, круглые скобки используются в подзапросах. Больше про использование круглых скобок я не нашел ничего.
(SELECT * FROM sales2005) UNION (SELECT * FROM sales2006);
Зачем запросы берутся в круглые скобки? Когда вообще в MySQL надо ставить круглые скобки и для чего они служат? Если, например, написать запрос для тестовой БД world, чтобы из таблицы с городами выбрало русские и украинские города
(SELECT name FROM city WHERE countrycode='RUS' ORDER BY name) UNION (SELECT name FROM city WHERE countrycode='UKR');

то русские города почему-то не упорядочиваются по алфавиту. Почему? На картинке выше видно, что первым городом идет Moscow, хотя первым должен быть город на «A». Если можно, то напишите с примерами, чтобы лучше было понятно. Спасибо