Що означає знак долара, який супроводжується квадратною дужкою $ […] в баші?


34

Виявляється, $[expr]виконує арифметичне розширення так само $((expr)). Але я не можу знайти жодної згадки $[в посібнику по баш. Ця команда не дає результатів:

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

Що це за оператор і чи ніде стандартизована його поведінка?

Моя версія bash: GNU bash, версія 3.2.51 (1) -випуск (x86_64-apple-darwin13)


3
Щоб чітко відповісти на ваше запитання щодо стандарту : (застарілий) bashспецифічний $[...]синтаксис є нестандартним. $((...))(Що випливає з ksh) є стандартною POSIX.
Яніс

2
З Ubuntu 11,04: man bash | grep -E '\$\['. Вихід: Старий формат $ [вираз] застарілий і буде видалений у наступних версіях
Сайрус

Сторінки man можуть містити такі речі, як _t_h_i_s (що потім інтерпретується утилітою man так, щоб виглядати інакше), щоб ваш греп не зміг, якщо це станеться, те, що ви шукали, повинно було бути зазначено таким чином
Олів'є Дулак

Відповіді:


19

Ви можете знайти старе джерело баш тут . Зокрема, я завантажив bash-1.14.7.tar.gz . У documentation/bash.txtви знайдете:

Арифметичне розширення

Арифметичне розширення дозволяє оцінити арифметичний вираз і підмінити результат. Існує два формати для арифметичного розширення:

     $[expression]

     $((expression))

Посилання на $[пішли в doc/bash.htmlс Баш-док-2.0.tar.gz скачати і NEWSфайл згадує , що:

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

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

Однак, як $[...]і раніше, працює в Bash 5.0, тому його не видаляють повністю.


27

У нитці у списку розсилки GNU GHU йдеться про те, що $[синтаксис був раннім синтаксисом, який був застарілим на користь $((, оскільки останній вже використовувався оболонкою Korn.

Відповідно до цього сайту , посібник з bash 3.2.48 містив посилання на $[синтаксис. Отже, імовірно, це посилання було знято в 3.2.51.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.