Co oznacza znak dolara, po którym następuje nawias kwadratowy […] w bash?

34

Wydaje się, że $[expr]wykonuje rozszerzenie arytmetyczne tak jak $((expr)). Ale nie mogę znaleźć żadnej wzmianki $[w podręczniku bash. To polecenie nie daje wyników:

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

Co to jest ten operator i czy jego zachowanie jest znormalizowane gdziekolwiek?

Moja wersja bash: GNU bash, wersja 3.2.51 (1) -release (x86_64-apple-darwin13)

AmadeusDrZaius
źródło
3
Aby jednoznacznie odpowiedzieć na pytanie dotyczące normy : (przestarzała) bashspecyficzna $[...]składnia jest niestandardowa. $((...))(Co wynika z ksh) jest standardem POSIX.
Janis,
2
Z Ubuntu 11.04: man bash | grep -E '\$\['. Wyjście: stary format $ [wyrażenie] jest przestarzały i zostanie usunięty w nadchodzących wersjach
Cyrus
strony man mogą zawierać rzeczy takie jak _t_h_i_s (które są następnie interpretowane przez narzędzie man w taki sposób, aby wyglądały inaczej), więc twój grep może zawieść, jeśli zdarzy się, że szukana rzecz powinna być odnotowana w ten sposób
Olivier Dulac

Odpowiedzi:

19

Możesz znaleźć stare źródło bash tutaj . W szczególności pobrałem bash-1.14.7.tar.gz . W documentation/bash.txtznajdziesz:

Rozbudowa arytmetyczna

Rozwinięcie arytmetyczne pozwala na ocenę wyrażenia arytmetycznego i podstawienie wyniku. Istnieją dwa formaty rozszerzania arytmetycznego:

     $[expression]

     $((expression))

Odniesienia do $[zostały usunięte doc/bash.htmlz pliku bash-doc-2.0.tar.gz, a NEWSplik wspomina, że:

$[...]Składnia ekspansja arytmetyka nie jest już obsługiwany, na korzyść $((...)).

$((...))jest również standardową składnią rozszerzenia arytmetycznego, ale mogła zostać dodana do standardu później niż oryginalna implementacja Bash.

Jednak $[...]nadal wydaje się działać w Bash 5.0, więc nie został całkowicie usunięty.

Cyfrowa trauma
źródło
27

W wątku na liście mailingowej GNU bash napisano, że $[składnia była wczesną składnią, która została wycofana na korzyść $((, ponieważ ta ostatnia była już używana przez powłokę Korna.

Według tej strony podręcznik bash 3.2.48 zawierał odniesienie do $[składni. Przypuszczalnie odniesienie to zostało usunięte w 3.2.51.

AmadeusDrZaius
źródło