Похоже, что $[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)
bash
arithmetic
AmadeusDrZaius
источник
источник
bash
специфический$[...]
синтаксис не является стандартным.$((...))
(Что вытекает изksh
) является стандартной POSIX.man bash | grep -E '\$\['
. Вывод: старый формат $ [выражение] устарел и будет удален в следующих версияхОтветы:
Вы можете найти старый источник Bash здесь . В частности, я скачал bash-1.14.7.tar.gz . В
documentation/bash.txt
вы найдете:Ссылки на него
$[
взятыdoc/bash.html
из загрузки bash-doc-2.0.tar.gz, и вNEWS
файле упоминается, что:$((...))
также является стандартным синтаксисом для арифметического расширения, но, возможно, был добавлен к стандарту позже, чем исходная реализация Bash.Тем
$[...]
не менее, кажется , все еще работает в Bash 5.0, поэтому он не полностью удален.источник
В потоке в списке рассылки GNU bash говорится, что
$[
синтаксис был ранним синтаксисом, который был признан устаревшим$((
, поскольку последний уже использовался оболочкой Korn.Согласно этому сайту , руководство по bash 3.2.48 содержало ссылку на
$[
синтаксис. Предположительно, эта ссылка была удалена в 3.2.51.источник