จะมีอะไรใหม่ใน bash 5


29

ฉันเพิ่งจะผ่านพื้นที่เก็บข้อมูลทุบตีอย่างเป็นทางการ (ฉันมักจะไม่ทำสิ่งนี้) สำหรับสิ่งที่ไม่เกี่ยวข้อง แต่สังเกตเห็นว่าทุบตี 5 อยู่ในรุ่นเบต้าแล้ว ฉันแค่อยากรู้เกี่ยวกับสิ่งที่กำลังจะใหม่ใน bash 5 แต่ไม่พบข้อมูลใด ๆ มีคนสรุปการเปลี่ยนแปลงระหว่างรุ่น Bash 4.4 และ 5 ได้ไหม


6
มันอยู่ที่นั่นในCHANGESไฟล์: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

คำตอบ:


21

การเปลี่ยนแปลงที่เกิดขึ้นbashระหว่างรีลีส 4.4 และ 5.0 (รีลีส 2019-01-07) อาจพบได้ในNEWSไฟล์ในการbashแจกจ่ายต้นฉบับ

นี่คือลิงค์ไปสู่มัน (การเปลี่ยนแปลงมีมากเกินไปที่จะแสดงรายการที่นี่)


มุมมองสั้น ๆ loadable builtinsแสดงให้เห็นคำว่า ไม่bashเป็นไปตามมาตรฐานใหม่ที่ตั้งขึ้นโดยksh93จะหา builtins ที่เพิ่มขึ้นผ่านทางPATHแทนการให้พวกเขามีความสำคัญเสมอ?
schily

@schily bash4.4 และการใช้งานในภายหลังและโหลดพวกเขาจากที่นั่นด้วยBASH_LOADABLES_PATH enable -f builtin-name
Kusalananda

ดูเหมือนว่าจะมีผลกับเวลาที่โหลดคำสั่ง แล้วเวลาที่ผ่านมาล่ะ enableดูเหมือนการนำมาใช้ใหม่ของksh93คำสั่งbuiltinแต่มันขาดคุณสมบัติในการเชื่อมโยงพา ธ ไปยังทุกคำสั่ง builtin ซึ่งksh93โดยปกติจะกำหนดไว้ล่วงหน้าโดย/usr/ast/bin/<name>และอนุญาตให้มีการควบคุมที่ละเอียดกว่า buiiltins ทั้งหมด
Schily

@ Kusalananda ฉันจะได้รับทุบตีใหม่ 5.0 ได้อย่างไร
Ankur Loriya

@AnkurLoriya คุณรอจนกว่าคุณจะจำหน่าย Unix จัดส่งเป็นแพ็กเกจหรือคุณรวบรวมจากแหล่งที่มา แหล่งที่มาและคำแนะนำการติดตั้งที่มีอยู่บนหน้า GNU ทุบตี
Kusalananda

14

หากคุณเช่นฉันกำลังมองหาคุณสมบัติของข้อความพาดหัวมากกว่ารายการเปลี่ยนแปลงแบบเต็มโพสต์นี้โดยผู้ดูแลระบบ Chet Ramey พูดถึงเรื่องนั้น นี่คือส่วนที่น่าสนใจ:

รุ่นนี้แก้ไขข้อบกพร่องที่โดดเด่นใน bash-4.4 และแนะนำคุณสมบัติใหม่หลายอย่าง การแก้ไขข้อบกพร่องที่สำคัญที่สุดคือการยกเครื่องว่าตัวแปร nameref แก้ไขและจำนวนข้อผิดพลาดของหน่วยความจำนอกขอบเขตที่ค้นพบผ่านการทำให้งงงวย มีการเปลี่ยนแปลงจำนวนมากในการขยาย $ @ และ $ * ในบริบทต่าง ๆ ที่การแยกคำไม่ได้ดำเนินการเพื่อให้สอดคล้องกับการตีความมาตรฐาน Posix และการเปลี่ยนแปลงเพิ่มเติมเพื่อแก้ไขกรณีมุมสำหรับความสอดคล้อง Posix

คุณสมบัติใหม่ที่โดดเด่นที่สุดคือตัวแปรเชลล์ใหม่หลายตัว: BASH_ARGV0, EPOCHSECONDS และ EPOCHREALTIME builtin `history 'สามารถลบช่วงของรายการประวัติและเข้าใจข้อโต้แย้งเชิงลบเป็นออฟเซ็ตจากส่วนท้ายของรายการประวัติ มีตัวเลือกในการอนุญาตให้ตัวแปรโลคัลสืบทอดค่าของตัวแปรที่มีชื่อเดียวกันที่ขอบเขตก่อนหน้านี้ มีตัวเลือกเชลล์ใหม่ที่เมื่อเปิดใช้งานจะทำให้เชลล์พยายามขยายตัวเชื่อมโยงอาร์เรย์ที่เชื่อมโยงเพียงครั้งเดียว (นี่เป็นปัญหาเมื่อมีการใช้ในการแสดงออกทางคณิตศาสตร์) ตัวเลือกเชลล์ `globasciiranges 'ถูกเปิดใช้งานตามค่าเริ่มต้นแล้ว สามารถตั้งค่าเป็นปิดได้ตามค่าเริ่มต้นเมื่อถึงเวลากำหนดค่า

มีการเปลี่ยนแปลงบางอย่างที่เข้ากันไม่ได้ระหว่าง bash-4.4 และ bash-5.0 การเปลี่ยนแปลงวิธีแก้ไขตัวแปร nameref หมายความว่าการใช้ namerefs บางอย่างจะทำงานแตกต่างกันแม้ว่าฉันจะพยายามลดปัญหาความเข้ากันได้ให้น้อยที่สุดก็ตาม โดยค่าเริ่มต้นเชลล์ตั้งค่า BASH_ARGC และ BASH_ARGV เมื่อเริ่มต้นเท่านั้นหากเปิดใช้งานโหมดแก้ไขข้อบกพร่องเพิ่มเติม เป็นการตรวจสอบว่ามีการตั้งค่าอย่างไม่มีเงื่อนไขและทำให้เกิดปัญหาประสิทธิภาพเมื่อสคริปต์ถูกส่งผ่านการขัดแย้งจำนวนมาก

เขายังอ้างถึงไฟล์ทั้งสองนี้ในกรณีที่คุณต้องการเพิ่มเติม:


5

builtin `history 'สามารถลบช่วงของรายการประวัติและเข้าใจข้อโต้แย้งเชิงลบเป็นออฟเซ็ตจากส่วนท้ายของรายการประวัติ

ตัวอย่างการลบช่วง:

history -d 123-130

หรือลบ 10 รายการสุดท้าย:

history -d -10--1

ข้อความที่ตัดตอนมาจากBash 5 Man Page :

'ประวัติศาสตร์'

ตัวเลือกหากให้มามีความหมายดังนี้:

'-d OFFSET' ลบรายการประวัติที่ตำแหน่ง OFFSET หาก OFFSET เป็นค่าบวกควรระบุตามที่ปรากฏเมื่อมีการแสดงประวัติ หาก OFFSET เป็นค่าลบจะถูกตีความว่าสัมพันธ์กับตำแหน่งที่มากกว่าตำแหน่งประวัติล่าสุดดังนั้นดัชนีเชิงลบจะนับกลับจากจุดสิ้นสุดของประวัติและดัชนีของ '-1' หมายถึงคำสั่ง 'history -d' ปัจจุบัน

'-d START-END' ลบรายการประวัติระหว่างตำแหน่งเริ่มต้นและสิ้นสุดรวมถึง ค่าบวกและลบสำหรับ START และ END จะตีความตามที่อธิบายไว้ข้างต้น

ดูคำตอบที่เกี่ยวข้องของฉัน: ลบช่วงของประวัติทุบตี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.