Подтвердить что ты не робот

Bash: $[<арифметическое выражение>] против $((<арифметическое выражение>))

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

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

Когда я зашел в Google, я нашел http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05:

3.4.6. Арифметическое расширение

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

$(( EXPRESSION )) 

...

По возможности пользователи bash должны пытаться использовать синтаксис с квадратными скобками:

$[ EXPRESSION ] 

Однако это будет только вычислять результат EXPRESSION и не выполнять никаких тестов...

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

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

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

4b9b3361

Ответ 1

В manpage для bash v3.2.48 говорится:

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

     $((expression))

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

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

Ответ 2

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

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

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

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