Что означает знак доллара, за которым следует квадратная скобка $ […] в bash?

34

Похоже, что $[expr]выполняет арифметическое расширение так же, как $((expr)). Но я не могу найти упоминания $[в руководстве по bash. Эта команда не дает результатов:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

Что это за оператор и его поведение где-нибудь стандартизировано?

Моя версия bash: GNU bash, версия 3.2.51 (1) -релиз (x86_64-apple-darwin13)

AmadeusDrZaius
источник
3
Чтобы четко ответить на ваш вопрос о стандарте : (устаревший) bashспецифический $[...]синтаксис не является стандартным. $((...))(Что вытекает из ksh) является стандартной POSIX.
Янис
2
С Ubuntu 11,04: man bash | grep -E '\$\['. Вывод: старый формат $ [выражение] устарел и будет удален в следующих версиях
Cyrus
Страницы man могут содержать такие вещи, как _t_h_i_s (которые затем интерпретируются утилитой man, чтобы они выглядели по-другому), поэтому ваш grep может потерпеть неудачу, если это произойдет, то, что вы искали, должно было быть отмечено следующим образом
Olivier Dulac

Ответы:

19

Вы можете найти старый источник Bash здесь . В частности, я скачал bash-1.14.7.tar.gz . В documentation/bash.txtвы найдете:

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

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

     $[expression]

     $((expression))

Ссылки на него $[взяты doc/bash.htmlиз загрузки bash-doc-2.0.tar.gz, и в NEWSфайле упоминается, что:

Не $[...]Синтаксис арифметического расширения больше не поддерживается, в пользу $((...)).

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

Тем $[...]не менее, кажется , все еще работает в Bash 5.0, поэтому он не полностью удален.

Цифровая травма
источник
27

В потоке в списке рассылки GNU bash говорится, что $[синтаксис был ранним синтаксисом, который был признан устаревшим $((, поскольку последний уже использовался оболочкой Korn.

Согласно этому сайту , руководство по bash 3.2.48 содержало ссылку на $[синтаксис. Предположительно, эта ссылка была удалена в 3.2.51.

AmadeusDrZaius
источник