Подтвердить что ты не робот

Let vs expr vs двойная скобка в арифметике в оболочке

Когда я впервые изучал сценарии оболочки, многие примеры, которые я видел, использовали let для базовой арифметики, но позже я узнал, что некоторые среды не представляют let как встроенный, но поддерживают использование expr вместо этого (хотя он значительно медленнее).

Однако во многих оболочках также можно использовать двойные скобки для выполнения арифметики, например $((54 + 102)).

Поскольку я пишу script для переносимости, это представляет собой минное поле возможностей; в настоящее время я использую две разные функции оболочки (один для let и один для expr) и с помощью быстрого теста, чтобы решить, какой из них использовать в остальной части моего script.

Во всяком случае, я хотел бы знать, может ли кто-нибудь прояснить совместимость каждой из этих трех арифметических команд (и любых других, которые я пропустил). Я надеюсь, что форма двойных круглых скобок может быть достаточно распространенной, чтобы я мог просто проверять совместимость, но это трудно найти, поэтому я решил просто приехать сюда и попросить выяснить наверняка.

Только для того, чтобы заметить, что меня интересует только регулярная арифметика, я думаю, что я уже рассмотрел несколько больших целых чисел, с которыми я (возможно) должен работать.

4b9b3361

Ответ 1

$(( ... )) определяется в стандарте POSIX, который, вероятно, настолько же портативен, насколько вам нужно.