ในอดีตtestคำสั่งนั้นมีอยู่ก่อน (อย่างน้อยก็ไกลถึงUnix Seventh Editionในปี 1979) จะใช้ประกอบการ=และ!=เพื่อเปรียบเทียบสตริงและ-eq, -ne, -ltและอื่น ๆ เพื่อเปรียบเทียบตัวเลข ตัวอย่างเช่นtest 0 = 00เป็นเท็จ แต่test 0 -eq 00เป็นจริง ฉันไม่รู้ว่าทำไมเลือกไวยากรณ์นี้ แต่อาจต้องหลีกเลี่ยงการใช้<และ>ซึ่งเชลล์จะแยกวิเคราะห์เป็นตัวดำเนินการเปลี่ยนเส้นทาง testคำสั่งมีไวยากรณ์อีกไม่กี่ปีต่อมา: เทียบเท่ากับ[ … ]test …
[[ … ]]ไวยากรณ์เงื่อนไขภายในซึ่ง<และ>สามารถนำมาใช้เป็นผู้ประกอบการโดยไม่ต้องอ้างถูกเพิ่มในภายหลังใน ksh มันยังคงความเข้ากันได้ย้อนหลังด้วย[ … ]ดังนั้นจึงใช้ตัวดำเนินการเดียวกัน แต่เพิ่ม<และ>เปรียบเทียบสตริง (ตัวอย่างเช่น[[ 9 > 10 ]]แต่[[ 9 -lt 10 ]]) สำหรับข้อมูลเพิ่มเติมให้ดูที่การใช้วงเล็บเดี่ยวหรือคู่ - ทุบตี
นิพจน์ทางคณิตศาสตร์ก็มาช้ากว่าtestคำสั่งใน Korn shellในบางครั้งในปี 1980 พวกเขาติดตามไวยากรณ์ของภาษา C ซึ่งเป็นที่นิยมอย่างมากในแวดวง Unix ดังนั้นพวกเขาจึงใช้โอเปอเรเตอร์ของ C: ==เพื่อความเท่าเทียม<=สำหรับน้อยหรือเท่ากันเป็นต้น
Unix Seventh Edition ไม่มีนิพจน์ทางคณิตศาสตร์ แต่มีexprคำสั่งซึ่งใช้ไวยากรณ์ C-like สำหรับการดำเนินการจำนวนเต็มรวมถึงตัวดำเนินการเปรียบเทียบ ในสคริปต์เปลือกตัวละคร<และ>จะต้องมีการยกมาเพื่อปกป้องพวกเขาจากเปลือกเช่นเทียบเท่ากับif expr 1 \< 2; … if test 1 -lt 2; …การเพิ่มการแสดงออกทางคณิตศาสตร์ให้กับเชลล์ทำให้การใช้งานส่วนใหญ่exprล้าสมัยดังนั้นจึงไม่เป็นที่รู้จักในปัจจุบัน
ในสคริปต์ sh คุณมักจะใช้นิพจน์ทางคณิตศาสตร์เพื่อคำนวณค่าจำนวนเต็มและ[ … ]เปรียบเทียบจำนวนเต็ม
if [ "$((x + y))" -lt "$z" ]; then …
ในสคริปต์ ksh, bash หรือ zsh คุณสามารถ((…))ใช้ได้ทั้งคู่
if ((x + y < z)); then …
[[ … ]]รูปแบบจะเป็นประโยชน์ถ้าคุณต้องการที่จะใช้เงื่อนไขที่เกี่ยวข้องกับสิ่งอื่นที่ไม่ใช่จำนวนเต็ม
= != < <= > >=เปรียบเทียบสตริง1 -eq 01but1 != 01and8 -lt 42but8 > 42