Apa arti tanda dolar diikuti dengan tanda kurung $ […] dalam bash?

34

Tampaknya $[expr]melakukan ekspansi aritmatika seperti $((expr)). Tapi saya tidak dapat menemukan disebutkan $[dalam manual bash. Perintah ini tidak memberikan hasil:

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

Apa operator ini dan apakah perilakunya distandarisasi di mana saja?

Versi bash saya: GNU bash, versi 3.2.51 (1) -release (x86_64-apple-darwin13)

AmadeusDrZaius
sumber
3
Untuk secara eksplisit menjawab pertanyaan Anda tentang standar : Sintaks bashkhusus (usang) $[...]adalah non-standar. The $((...))(yang berasal dari ksh) adalah POSIX standar.
Janis
2
Dengan Ubuntu 11.04: man bash | grep -E '\$\['. Output: Format lama $ [ekspresi] sudah usang dan akan dihapus dalam versi mendatang
Cyrus
halaman manual dapat berisi hal-hal seperti _t_h_i_s (yang kemudian ditafsirkan oleh utilitas man agar tampak berbeda) sehingga grep Anda bisa gagal jika terjadi hal yang Anda cari seharusnya dicatat seperti ini
Olivier Dulac

Jawaban:

19

Anda dapat menemukan sumber bash lama di sini . Khususnya saya mengunduh bash-1.14.7.tar.gz . Di dalam documentation/bash.txtAnda akan menemukan:

Ekspansi Aritmatika

Perluasan aritmatika memungkinkan evaluasi ekspresi aritmatika dan penggantian hasilnya. Ada dua format untuk ekspansi aritmatika:

     $[expression]

     $((expression))

Referensi untuk $[masuk doc/bash.htmldari bash-doc-2.0.tar.gz unduhan dan NEWSfile menyebutkan bahwa:

The $[...]sintaks ekspansi aritmatika tidak lagi didukung, mendukung $((...)).

$((...))juga merupakan sintaks standar untuk ekspansi aritmatika, tetapi mungkin telah ditambahkan ke standar lebih lambat dari implementasi Bash yang asli.

Namun, $[...]sepertinya masih berfungsi di Bash 5.0, jadi tidak sepenuhnya dihapus.

Trauma Digital
sumber
27

Dalam utas pada milis GNU bash , dikatakan bahwa $[sintaksisnya adalah sintaksis awal yang sudah tidak digunakan lagi $((, karena yang terakhir sudah digunakan oleh shell Korn.

Menurut situs ini , manual untuk bash 3.2.48 berisi referensi ke $[sintaks. Jadi mungkin referensi ini telah dihapus di 3.2.51.

AmadeusDrZaius
sumber