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


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.