Dash, Ash และ sh รองรับสคริปต์ได้ 100% หรือไม่


16

ฉันต้องการทราบว่าสคริปต์ที่เขียนขึ้นสำหรับเส้นประเถ้าและ sh เข้ากันได้ 100% หรือไม่

มีฟีเจอร์ที่เพิ่มเข้ามาเพื่อขีดหรือเถ้าหรือการเปลี่ยนแปลงทางไวยากรณ์หรือไม่?

จากสิ่งที่ฉันได้ยินเถ้าเป็นลูกหลานของดวลจุดโทษโดยตรง


เถ้าเป็นรูปแบบลายทุบตี
Joe

4
แหล่งที่มา? ฉันไม่เห็นอะไรที่บอกว่าเถ้าเกี่ยวข้องกับทุบตี
1115057

ทำไมผู้คนถึงไม่ส่งแพทช์ให้ทุบตีแทนที่จะสร้างเชลล์ทุกชนิดนั่นทำให้ฉันบัฟเฟอร์ตลอดเวลา หากคุณต้องการทราบจริงๆอ่านคู่มือเช่นman ash
เดซี่

2
ถูกต้องมันไม่ได้สืบทอดมาจากการทุบตี มันจะแม่นยำกว่านี้ถ้าบอกว่าพวกมันสืบทอดมาจาก sh (เชลล์เป้าหมายเดิม) แต่นั่นก็ไม่ถูกต้องเช่นกัน
Zlatko

คุณสามารถใช้ยูทิลิตีcheckbashismsเพื่อทดสอบว่าสคริปต์ของคุณเป็นไปตาม POSIX
donothingsu ประสบความสำเร็จ

คำตอบ:


18

คำตอบสั้น ๆ คือไม่พวกมันเข้ากันไม่ได้ 100%

แต่กระสุนส่วนใหญ่นั้นค่อนข้างใกล้เคียงกับพื้นฐานดังนั้นคุณแทบจะไม่ชนกับความไม่ลงรอยกัน ในความเป็นจริงเชลล์ส่วนใหญ่แตกต่างกันไม่มากนักโดยเพิ่มไวยากรณ์ แต่โดยคุณสมบัติพิเศษบางอย่างเช่นการทำให้แท็บเสร็จสมบูรณ์และคล้ายกัน

นอกจากนี้ยังdashเป็นลูกหลานของash- หรือพอร์ตจาก BSD ถึง Linux เพื่อความแม่นยำ shและทุกคนควรจะมีลูกหลานหรือการใช้งานที่แตกต่างกันของ ในความเป็นจริงshที่อยู่บนระบบส่วนใหญ่ก็ symlink ให้bash, dashหรือสิ่งอื่นใด สิ่งสำคัญคือการปฏิบัติตาม POSIX - และเมื่อคุณเขียนสคริปต์ตามมาตรฐานคุณจะไม่พบปัญหา

ความแตกต่างระหว่างเชลล์เหล่านั้นคือการปรับให้เหมาะสมและประสิทธิภาพ ตอนนี้มันมีคุณสมบัติที่หลากหลายน้อยกว่าbashแต่มันเป็นกระสุนที่สมบูรณ์แบบ Bash นั้นเต็มไปด้วยคุณสมบัติสำหรับการทำงานแบบโต้ตอบ แต่ใช้หน่วยความจำมากขึ้น


แต่สำหรับการใช้งานสคริปต์พวกเขาเข้ากันได้?
user1115057

และเกี่ยวกับการปฏิบัติตาม POSIX แม้ว่าฉันจะปฏิบัติตามมาตรฐานนั้นหากสคริปต์เขียนขึ้นสำหรับ Bash ฉันไม่คิดว่ามันจะทำงานบน sh หรือลูกหลานของมัน
user1115057

ควรใช้งานร่วมกันได้หากคุณไม่ได้ใช้คุณสมบัติที่ไม่ชัดเจน แต่ถ้าคุณใช้ bash script คุณอาจพบปัญหามากขึ้น
Zlatko

ไม่เคยตั้งใจจะใช้ทุบตีกับ sh หรือเถ้าหรือเส้นประ คุณสมบัติที่ไม่ชัดเจนเหล่านั้นคืออะไร?
user1115057

1
คุณสมบัติใหม่ของ bash จำนวนมากเป็นการเพิ่มเติมผ่าน POSIX ดังนั้นจึงเป็นไปได้มากขึ้นที่คุณจะเขียนโค้ดที่ไม่สามารถถอดออกได้หากคุณใช้มัน IIRC แม้แต่โครงสร้าง [[]] ก็ไม่ได้อยู่ในการดวลจุดโทษ ระวังด้วยว่าถ้าคุณไม่ได้เขียนสคริปต์ shell ที่บริสุทธิ์ความแตกต่างของเครื่องมือก็จะเกิดขึ้นเช่นกัน (sed, grep, awk ... )
lynxlynxlynx

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