ในอดีต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 01
but1 != 01
and8 -lt 42
but8 > 42