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)
bash
arithmetic
AmadeusDrZaius
źródło
źródło
bash
specyficzna$[...]
składnia jest niestandardowa.$((...))
(Co wynika zksh
) jest standardem POSIX.man bash | grep -E '\$\['
. Wyjście: stary format $ [wyrażenie] jest przestarzały i zostanie usunięty w nadchodzących wersjachOdpowiedzi:
Możesz znaleźć stare źródło bash tutaj . W szczególności pobrałem bash-1.14.7.tar.gz . W
documentation/bash.txt
znajdziesz:Odniesienia do
$[
zostały usuniętedoc/bash.html
z pliku bash-doc-2.0.tar.gz, aNEWS
plik wspomina, że:$((...))
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.źródło
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.źródło