Что делает оператор запятой в арифметике Баша?

В руководстве Bash, сек 6.5 Арифметика оболочки

expr1 , expr2 comma 

Что делает оператор запятой?

Являются ли expr1 и expr2 арифметическими?

, является оператором списка.

Список арифметических выражений будет оцениваться слева направо, последним результатом выражения является возвращаемое значение:

 $ echo "$(( a=1, ++a, ++a ))" 3 

Оператор списка был добавлен в bash-2.04-devel (наряду с операторами pre / post increment / decment).

Возможно, вы захотите прочитать expr.c чтобы узнать, как были реализованы другие операторы, и функцию expcomma() for , operator.

удар

Оператор запятой действителен в bash ( LESS=+/'expr1 , expr2' man bash ):

expr1, expr2
запятая

И никакого другого объяснения его использования.
Для этого мы должны прочитать описание «C Language» (где все эти арифметические операторы родились) .

Пример (как в ссылке выше) (вторая из которых имеет значение 5):

 $ echo "$(( (t=3, t+2) )) $t" 5 3 

Или, проще:

 $ echo "$(( t=3, t+2 )) $t" 5 3 

Да, каждый элемент, разделенный запятой, может быть выражением :

 1313 expression: assignment-expression expression , assignment-expression 

POSIX

POSIX не включает запятую:
Таблица: выбранные стандартные операторы ИСО и ключевые слова управления

Или просто попробуйте:

 $ dash -c 'echo $(( t=3,t+2 ))' dash: 1: arithmetic expression: expecting EOF: " t=3,t+2 " $ bash -c 'echo $(( t=3,t+2 ))' 5 

Как IBM подтверждает на своей странице для оболочки AIX и POSIX (выделение мое):

Поддерживаются все интегральные операторы, кроме … и запятая (,).

Но также в AIX IBM заявляет о поддержке оператора запятой из оболочки ksh93 в /usr/bin/ksh93

Доступны более арифметические операторы, включая унарные +, ++, – и конструкцию?: (Например, «x? Y: z»), а также оператор (запятая).

Вывод:

 dash, ksh do not have a comma operator. ksh93 may have a comma operator. bash, zsh do have a comma operator.