Вопрос

Я только что наткнулся на синтаксис bash:

foo=42
bar=$[foo+1] # evaluates an arithmetic expression

Когда я погуглил это, я нашел http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05:

3.4.6.Арифметическое разложение

Арифметическое расширение позволяет вычислять арифметическое выражение и подстановку результата.Формат для арифметического расширения следующий:

$(( EXPRESSION )) 

...

Везде, где это возможно, пользователи Bash должны стараться использовать синтаксис с квадратными скобками:

$[ EXPRESSION ] 

Однако это приведет только к вычислению результата ВЫРАЖЕНИЯ и не будет выполнять никаких тестов...

На моей справочной странице bash я могу найти только $(( EXPRESSION )) форма, такая как:

foo=42
bar=$((foo+1)) # evaluates an arithmetic expression

Итак, какие тесты не выполняются с $[...] что делать с $((...)), или является $[...] просто устаревшая версия $((...))?

Это было полезно?

Решение

На странице руководства для bash v3.2.48 написано:

[...] Формат для арифметического расширения является:

     $((expression))

В старый формат $[expression] устарел и будут удалены в следующих версиях из bash.

Итак $[...] это старый синтаксис, который больше не следует использовать.

Другие советы

@sth абсолютно верен.И в случае, если вам интересно, почему сейчас в моде более подробный синтаксис, ознакомьтесь с этим старым письмом из списка рассылки.

http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html

“В ранних предложениях использовалась форма $[expression].Функционально это было эквивалентно "$(())" текущего текста, но были выдвинуты возражения по поводу того, что в KornShell 1988 года уже было реализовано "$(())" и не было никаких веских причин изобретать еще один синтаксис.Кроме того, синтаксис "$[]" имел незначительную несовместимость, связанную с шаблонами в операторах case.”

Я не уверен, что мне нравится обоснование “но кто-то уже сделал это более подробно”, но вот оно — может быть, проблема с изложением дела была более убедительной, чем я представляю из этого неясного упоминания?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top