$(( ))
является арифметической подстановкой или арифметическим расширением. В нем вы можете выполнять (целочисленные )арифметические операции, и оболочка будет выполнять их и заменять все выражение результатом этих операций.
Вы часто видите, как это используется в
count=$(( count + 1 ))
Так как здесь оболочке делать нечего (арифметическая подстановка пуста ), ваша bash
оболочка решает, что результат равен нулю.
Вы используете это как команду, что означает, что оболочка попытается запустить результат 0
как команду.
Ошибка и сообщение о том, почему ("0 :команда не найдена" ).
Эта пустая арифметическая подстановка, по-видимому, представляет собой краеугольный случай, который по-разному обрабатывается в разных оболочках. Оболочка bash
вместе с zsh
иpdksh
(ksh
в OpenBSD )пытается выполнить 0
, в то время как dash
и yash
жалуются:
$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing
Стандарт POSIX говорит
As an extension, the shell may recognize arithmetic expressions beyond those listed.
... что может быть тем, что bash
, zsh
и pdksh
делают (, то есть они распознают пустое выражение как "ноль" ).