ทำไม "ไม่เคยใช้-a
หรือ-o
โอเปอเรเตอร์"
เพราะพวกมันอาจไม่ได้มาตรฐานและด้วยเหตุนี้พวกเขาจึงไม่ได้มาตรฐาน POSIX :
ส่วนขยาย XSI ที่ระบุตัวดำเนินการไบนารี -a และ -o และตัวดำเนินการ '(' และ ')' ถูกทำเครื่องหมายล้าสมัย (นิพจน์จำนวนมากที่ใช้นิพจน์นั้นถูกกำหนดโดยไวยากรณ์อย่างไม่ชัดเจนขึ้นอยู่กับนิพจน์เฉพาะที่ได้รับการประเมิน) สคริปต์ที่ใช้นิพจน์เหล่านี้ควรถูกแปลงเป็นรูปแบบที่ระบุด้านล่าง แม้ว่าการนำไปใช้งานจำนวนมากจะยังคงสนับสนุนรูปแบบที่ล้าสมัยเหล่านี้ แต่สคริปต์ควรระมัดระวังอย่างยิ่งเมื่อต้องจัดการกับอินพุตที่ผู้ใช้จัดหาซึ่งอาจสับสนกับสิ่งเหล่านี้และพรรคและผู้ประกอบการอื่น ๆ หากผู้พัฒนาแอปพลิเคชั่นรู้ทุกกรณีที่สร้างอินพุตให้กับสคริปต์การเรียกใช้เช่น:
test "$1" -a "$2"
ควรเขียนเป็น:
test "$1" && test "$2"
ฉันจะ "ใช้[
คำสั่งหลายคำสั่งและตัวดำเนินการ&&
และ||
เชลล์)" ได้อย่างไร
โดยทำการทดสอบหลายรายการและผูกมัดพวกเขาโดยใช้ตัวดำเนินการดังกล่าว ตัวอย่างเช่น:
[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]
สามารถเขียนใหม่ได้เทียบเท่า:
[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])
หรือดีกว่า:
[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }
(
และ)
ผู้ประกอบการที่กลุ่มคำสั่ง? หากพวกเขาล้าสมัยสิ่งทดแทนของพวกเขาคืออะไร? (2) ควรtest "$1" -a "$2"
ถูกแทนที่ด้วยtest "$1" && test "$2"
หรือโดย((test "$1" && test "$2"))
? เราไม่ต้องการ((..))
หรือ