Apa yang akan menjadi baru di bash 5

29

Saya baru saja melalui repositori resmi bash (saya biasanya tidak melakukan ini) untuk sesuatu yang tidak terkait tetapi memperhatikan bahwa bash 5 sudah dalam versi beta. Saya hanya ingin tahu tentang apa yang akan menjadi baru di bash 5 tetapi tidak dapat menemukan informasi. Adakah yang bisa meringkas perubahan antara versi 4.4 dan 5 Bash

akabhirav
sumber
6
Itu ada di sana dalam CHANGESfile: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Jawaban:

21

Perubahan yang dibuat bashantara rilis 4.4 dan 5.0 (dirilis 2019-01-07) dapat ditemukan dalam NEWSfile dalam bashdistribusi sumber.

Berikut ini tautannya (perubahannya terlalu banyak untuk disebutkan di sini).

Kusalananda
sumber
Pandangan singkat menunjukkan istilah tersebut loadable builtins. Apakah bashmengikuti standar baru yang ditetapkan oleh ksh93untuk menemukan builtin ditingkatkan melalui PATHbukannya memberi mereka selalu prioritas?
schily
@schily bash4.4 dan kemudian menggunakan BASH_LOADABLES_PATHdan memuatnya dari sana enable -f builtin-name.
Kusalananda
Nah, ini sepertinya berlaku untuk waktu ketika perintah dimuat. Bagaimana dengan masa lalu itu? enabletampak seperti implementasi ulang dari ksh93perintah builtintetapi melewatkan fitur untuk mengaitkan jalan ke setiap perintah builtin, yang ksh93biasanya ditentukan oleh /usr/ast/bin/<name>dan memungkinkan untuk memiliki kontrol berbutir halus atas semua buiiltin.
schily
@ Kusalananda bagaimana saya bisa mendapatkan bash 5.0 baru
Ankur Loriya
@AnkurLoriya Anda menunggu hingga distributor Unix mengirimkannya sebagai paket, atau Anda mengompilasinya sendiri dari sumber. Sumber dan instruksi instalasi tersedia di halaman Bash GNU .
Kusalananda
14

Jika Anda, seperti saya, mencari fitur tajuk alih-alih changelog lengkap, pos oleh pengelola ini, Chet Ramey, membahasnya. Inilah bagian yang menarik:

Rilis ini memperbaiki beberapa bug yang beredar di bash-4.4 dan memperkenalkan beberapa fitur baru. Perbaikan bug yang paling signifikan adalah perbaikan bagaimana variabel nameref menyelesaikan dan sejumlah potensi kesalahan memori di luar batas yang ditemukan melalui fuzzing. Ada sejumlah perubahan pada ekspansi $ @ dan $ * dalam berbagai konteks di mana pemisahan kata tidak dilakukan untuk menyesuaikan dengan interpretasi standar Posix, dan perubahan tambahan untuk menyelesaikan kasus sudut untuk kesesuaian Posix.

Fitur-fitur baru yang paling menonjol adalah beberapa variabel shell baru: BASH_ARGV0, EPOCHSECONDS, dan EPOCHREALTIME. Builtin `history 'dapat menghapus rentang entri histori dan memahami argumen negatif sebagai offset dari akhir daftar histori. Ada opsi untuk memungkinkan variabel lokal mewarisi nilai variabel dengan nama yang sama pada lingkup sebelumnya. Ada opsi shell baru yang, ketika diaktifkan, menyebabkan shell mencoba memperluas subscript array asosiatif hanya sekali (ini adalah masalah ketika mereka digunakan dalam ekspresi aritmatika). Opsi shell `globasciiranges 'sekarang diaktifkan secara default; itu dapat dinonaktifkan secara default pada waktu konfigurasi.

Ada beberapa perubahan yang tidak kompatibel antara bash-4.4 dan bash-5.0. Perubahan bagaimana variabel nameref dipecahkan berarti bahwa beberapa penggunaan nameref akan berperilaku berbeda, meskipun saya telah mencoba untuk meminimalkan masalah kompatibilitas. Secara default, shell hanya menetapkan BASH_ARGC dan BASH_ARGV saat startup jika mode debugging diperpanjang diaktifkan; itu adalah pengawasan yang ditetapkan tanpa syarat dan menyebabkan masalah kinerja ketika skrip disahkan banyak argumen.

Ia juga merujuk ke dua file ini, jika Anda menginginkan lebih:

  • BERITA : lebih detail (juga dalam jawaban Kusalananda)
  • PERUBAHAN : paling detail
Jacktose
sumber
5

Builtin `history 'dapat menghapus rentang entri histori dan memahami argumen negatif sebagai offset dari akhir daftar histori.

Contoh tentang menghapus rentang:

history -d 123-130

atau menghapus 10 terakhir:

history -d -10--1

Kutipan dari Bash 5 Man Page :

'sejarah'

Opsi, jika disediakan, memiliki arti sebagai berikut:

'-d OFFSET' Hapus entri riwayat di posisi OFFSET. Jika OFFSET positif, itu harus ditentukan seperti yang muncul ketika histori ditampilkan. Jika OFFSET negatif, itu ditafsirkan sebagai relatif terhadap yang lebih besar dari posisi riwayat terakhir, jadi indeks negatif menghitung mundur dari akhir sejarah, dan indeks '-1' mengacu pada perintah 'history -d' saat ini.

'-d START-END' Menghapus entri riwayat antara posisi MULAI dan AKHIR, inklusif. Nilai positif dan negatif untuk MULAI dan AKHIR ditafsirkan seperti yang dijelaskan di atas.

Lihat jawaban saya yang terkait: Hapus rentang riwayat bash

David Hatch
sumber