Почему вывод команды "$ (())" равен 0?

Так же просто, как:

grep -v na file > new_file
2
17.03.2021, 23:37
1 ответ

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

Вы часто видите, как это используется в

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делают (, то есть они распознают пустое выражение как "ноль" ).

4
18.03.2021, 22:24

Теги

Похожие вопросы