Bash let - это встроенная команда в системах Linux, используемая для оценки арифметических выражений. В отличие от других команд оценки и расширения арифметических выражений, let - это простая команда с собственным окружением. Команда let также позволяет выполнять арифметическое расширение.
Синтаксис команды let в Bash
Команда let использует следующий базовый синтаксис:
1 | let [выражение] |
В приведенном выше синтаксисе выражение - это арифметическое выражение, которое вы хотите, чтобы команда let оценила. let работает только с выражениями, содержащими целые числа. Команда let не поддерживает числа с плавающей точкой.
При использовании команды let лучше всего заключать отдельные выражения в двойные кавычки ( " ), чтобы избежать ошибок.
Команда let позволяет одновременно оценивать более одного выражения. В этом случае синтаксис выглядит следующим образом:
1 | let [выражение 1] [выражение 2] ... [выражение 3] |
Арифметические операторы let
Команда Bash let способна оценивать выражения, содержащие арифметические операторы из приведенной ниже таблицы. Операторы перечислены в порядке убывания старшинства, причем операторы с одинаковым старшинством перечислены в одной строке:
Оператор | Описание |
var++ var-- | Пост-инкремент (++): Интерпретировать значение переменной и добавить к нему 1. Пост-декримент (--): Интерпретировать значение переменной и вычесть из него 1. |
++var --var | Предварительное увеличение (++): Добавить 1 к значению переменной, а затем интерпретировать значение. Предварительное уменьшение (--): Вычесть 1 из значения переменной, а затем интерпретировать значение. |
-expr +expr | Унарный минус: Возвращает значение выражения, умноженное на -1. Унарный плюс: Возвращает значение выражения без изменений (умноженное на 1). |
! ~ | Логическое отрицание: Возвращают false, если операнд истинен, и true, если операнд ложен. Побитовое отрицание: Перевернуть биты в двоичном представлении числа. |
** | Экспонирование: Возведение одного целого числа в степень другого. |
* / % | Основные арифметические операторы: Умножение. Деление. Остаток (по модулю). |
+ - | Основные арифметические операторы: Сложение. Вычитание. |
<< >> | Побитовый сдвиг влево. Побитовый сдвиг вправо. |
<= >= < > | Сравнение стоимости: Меньше или равно. Больше или равно. Меньше, чем. Больше, чем. |
== != | Равенство: Возвращает true, если операнды равны. Неравенство: Возвращает false, если операнды равны. |
& | Побитовое И: Перемножает соответствующие цифры двух двоичных значений. |
^ | Побитовое XOR: сравнивает соответствующие цифры двух двоичных значений и возвращает 1, если цифры отличаются. |
| | Побитовое ИЛИ: Сравнивает соответствующие цифры двух двоичных значений и возвращает 1, если одна из цифр равна 1. |
&& | Логическое И: Возвращает истину, если оба операнда истинны. |
|| | Логическое ИЛИ: Возвращает истину, если любой из операндов истинен. |
expr1 ? expr2 : expr3 | Условный оператор: Если expr1 истинно, возвращает expr2. Если expr1 ложно, возвращается expr3. |
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= | Присвоение: Присвоение значения переменной. |
Примеры Bash let
Команда let позволяет присваивать значения переменным и выполнять арифметические, побитовые и логические операции. Примеры приведены в следующих разделах.
Присвоение значения переменной
Используйте команду let, чтобы присвоить значение переменной:
1 | let "[переменная] = [значение]" |
Например, присвойте переменной var1 значение 5 и выведите это значение в качестве вывода:
1 | let "var1 = 5"; echo $var1 |
Аналогично, после установки значения переменной команда let позволяет присвоить то же значение другой переменной:
1 | let "var1 = 5" "var2=var1"; echo $var2 |
Выполнение основных арифметических операций
После задания значений переменных используйте команду let для выполнения основных арифметических операций. Например, задайте var1 значение 6, а var2 - 2 и выполните сложение, вычитание, умножение, деление и умножение по модулю:
1 2 3 4 5 | let "var1 = 6" "var2 = 2" "var3=var1+var2"; echo $var3 let "var1 = 6" "var2 = 2" "var3=var1-var2"; echo $var3 let "var1 = 6" "var2 = 2" "var3=var1*var2"; echo $var3 let "var1 = 6" "var2 = 2" "var3=var1/var2"; echo $var3 let "var1 = 6" "var2 = 2" "var3=var1%var2"; echo $var3 |
В этом примере команда let устанавливает значение var3 как результат арифметической операции и выводит результат.
Выполнение экспоненцирования
Для выполнения экспоненциализации команда let требует два целочисленных значения. Первое значение (base) возводится в степень второго значения (power):
1 | let "[число] ** [степень]" |
Например, чтобы возвести базовое значение 3 в степень 2 и вывести результат, используйте эту команду:
1 | let "var1 = 3 ** 2"; echo $var1 |
Выполнение унарных операций
Используйте унарный минус с командой let, чтобы изменить выражение с положительного на отрицательное и наоборот:
1 | let "var1 = 2 + 3" "var1=-var1"; echo $var1 |
Унарный плюс умножает выражение на 1 и возвращает неизменное значение:
1 | let "var1 = 2 + 3" "var1=+var1"; echo $var1 |
Инкрементное изменение значения переменной
Использование операторов пост-инкремент или пост-декремент интерпретирует значение переменной, а затем увеличивает или уменьшает его на 1:
1 | let "var1 = 10" "var2=var1++"; echo $var1 $var2 |
В приведенном выше примере переменная var2 получает значение var1 (10) до того, как она будет увеличена на 1. То же самое происходит при выполнении post-decrement:
1 | let "var1 = 10" "var2=var1--"; echo $var1 $var2 |
Выполнение предварительного инкремента увеличивает значение var1 на 1 (11), а затем присваивает новое значение var2:
1 | let "var1 = 10" "var2=++var1"; echo $var1 $var2 |
Выполнение предварительного уменьшения делает то же самое. Однако на этот раз значение var1 уменьшается на 1 (9):
1 | let "var1 = 10" "var2=--var1"; echo $var1 $var2 |
Выполнение сдвига битов
Выполнение сдвига битов с помощью команды let сдвигает порядок цифр в двоичном числе влево или вправо. Например, если дважды выполнить сдвиг влево числа 8, то оно умножится на два дважды:
1 | let "var1 = 8 << 2"; echo $var1 |
И наоборот, двукратное выполнение сдвига вправо делит значение на 2 дважды:
1 | let "var1 = 8 >> 2"; echo $var1 |
Выполнение побитовых операций
Побитовое отрицание меняет местами каждую цифру двоичного числа. Эта операция меняет 1 на 0 и наоборот:
1 | let "var1 = 5" "var2=~var1"; echo $var2 |
В приведенном примере команда let преобразует значение 5 в 32-битное знаковое целое число (000000000000000000000000000000000101) и меняет разряды местами. В результате этой операции получается -6 (1111111111111111111111111111111111111010).
Оператор побитового AND преобразует пару значений в 32-битные знаковые целые числа и сравнивает цифры по порядку. Оператор возвращает 1, если обе цифры равны 1, иначе он возвращает 0:
1 | let "var1 = 5" "var2 = 10" "var3 = var1&var2"; echo $var3 |
Оператор побитового ИЛИ сравнивает соответствующие разряды двух значений и возвращает 1. Но, по крайней мере, один из битов должен быть равен 1:
1 | let "var1 = 5" "var2 = 10" "var3 = var1|var2"; echo $var3 |
Оператор побитового XOR сравнивает соответствующие цифры двух значений и возвращает 0, если цифры совпадают. В противном случае оператор возвращает 1:
1 | let "var1 = 5" "var2 = 10" "var3 = var1^var2"; echo $var3 |