bash: $ [<арифметическое выражение>] против $ ((<арифметическое выражение>)) - PullRequest
27 голосов
/ 10 марта 2010

Я только что наткнулся на синтаксис 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 ] 

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

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

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

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

Ответы [ 2 ]

32 голосов
/ 10 марта 2010

Страница руководства по bash v3.2.48 гласит:

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

     $((expression))

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

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

12 голосов
/ 11 августа 2012

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

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

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

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

...