Co nowego w bash 5


29

Właśnie przeszukiwałem oficjalne repozytorium bash (zwykle tego nie robię) dla czegoś niezwiązanego, ale zauważyłem, że bash 5 był już w fazie beta. Byłem ciekawy, co będzie nowego w bash 5, ale nie mogłem znaleźć żadnych informacji. Czy ktoś może podsumować zmiany między wersją 4.4 i 5 Bash


6

Odpowiedzi:


21

Zmiany wprowadzone bashmiędzy wersją 4.4 a 5.0 (wydaną 2019-01-07) można znaleźć w NEWSpliku w bashdystrybucji źródłowej.

Oto link do niego (zmiany są zbyt liczne, aby je tutaj wymienić).


Krótki widok pokazuje termin loadable builtins. Czy bashpostępuje zgodnie z nową standardową konfiguracją, ksh93aby znaleźć ulepszone funkcje wbudowane PATHzamiast nadawania im zawsze pierwszeństwa?
schily,

@schily bash4.4 i nowsze wersje używają BASH_LOADABLES_PATHi ładują je stamtąd enable -f builtin-name.
Kusalananda

Wydaje się, że dotyczy to czasu załadowania polecenia. A co z przeszłością? enablewygląda to na ponowną implementację ksh93polecenia, builtinale brakuje mu funkcji powiązania ścieżki z każdym wbudowanym poleceniem, które ksh93zwykle jest wstępnie zdefiniowane /usr/ast/bin/<name>i pozwala na precyzyjną kontrolę nad wszystkimi buiiltinami.
schily,

@Kusalananda, jak mogę uzyskać nowy bash 5.0
Ankur Loriya

@AnkurLoriya Czekasz, aż dystrybutor Uniksa wyśle ​​go jako pakiet, lub sam skompilujesz go ze źródeł. Źródła i instrukcje instalacji są dostępne na stronie GNU Bash .
Kusalananda

14

Jeśli, podobnie jak ja, szukasz funkcji nagłówka, a nie pełnego dziennika zmian, ten post autorstwa opiekuna, Cheta Rameya, omija to. Oto interesująca sekcja:

To wydanie naprawia kilka zaległych błędów w bash-4.4 i wprowadza kilka nowych funkcji. Najważniejsze poprawki błędów to przegląd sposobu, w jaki zmienne nameref są rozwiązywane, oraz szereg potencjalnych błędów pamięci wykraczających poza granice wykrytych w wyniku fuzzingu. Istnieje wiele zmian w rozszerzaniu $ @ i $ * w różnych kontekstach, w których dzielenie słów nie jest wykonywane w celu dostosowania do standardowej interpretacji Posix, oraz dodatkowe zmiany w celu rozwiązania przypadków narożnych dla zgodności Posix.

Najważniejsze nowe funkcje to kilka nowych zmiennych powłoki: BASH_ARGV0, EPOCHSECONDS i EPOCHREALTIME. Wbudowane `history 'może usuwać zakresy wpisów historii i rozumie negatywne argumenty jako przesunięcia na końcu listy historii. Istnieje możliwość zezwolenia zmiennym lokalnym na dziedziczenie wartości zmiennej o tej samej nazwie w poprzednim zakresie. Istnieje nowa opcja powłoki, która po włączeniu powoduje, że powłoka próbuje rozwinąć indeksy tablicy asocjacyjnej tylko raz (jest to problem, gdy są one używane w wyrażeniach arytmetycznych). Opcja powłoki `globasciiranges 'jest teraz domyślnie włączona; można go domyślnie wyłączyć w czasie konfiguracji.

Istnieje kilka niezgodnych zmian między wersją bash-4.4 a wersją bash-5.0. Zmiany w sposobie rozwiązywania zmiennych nameref oznaczają, że niektóre zastosowania namerefs będą się zachowywać inaczej, chociaż starałem się zminimalizować problemy ze zgodnością. Domyślnie powłoka ustawia BASH_ARGC i BASH_ARGV podczas uruchamiania tylko wtedy, gdy włączony jest tryb rozszerzonego debugowania; to przeoczenie polegało na tym, że zostało ono ustalone bezwarunkowo i powodowało problemy z wydajnością, gdy skrypty były przekazywane z dużą liczbą argumentów.

Odnosi się także do tych dwóch plików, na wypadek gdybyś chciał więcej:

  • AKTUALNOŚCI : więcej szczegółów (także w odpowiedzi Kusalanandy)
  • ZMIANY : najbardziej szczegółowe

5

Wbudowane `history 'może usuwać zakresy wpisów historii i rozumie negatywne argumenty jako przesunięcia na końcu listy historii.

Przykład usuwania zakresu:

history -d 123-130

lub usunięcie ostatnich 10:

history -d -10--1

Fragment strony Bash 5 :

'historia'

Opcje, jeśli są dostarczone, mają następujące znaczenie:

„-d OFFSET” Usuń wpis historii w pozycji OFFSET. Jeśli wartość OFFSET jest dodatnia, należy ją określić tak, jak jest wyświetlana podczas wyświetlania historii. Jeśli PRZESUNIĘCIE jest ujemne, jest interpretowane jako odnoszące się do jednego większego niż ostatnia pozycja historii, więc ujemne wskaźniki odliczają od końca historii, a indeks „-1” odnosi się do bieżącego polecenia „historia -d”.

„-d START-END” Usuń wpisy historii między pozycjami START i END włącznie. Wartości dodatnie i ujemne dla START i END są interpretowane jak opisano powyżej.

Zobacz moją pokrewną odpowiedź: Usuń zakres historii bash

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.