พิจารณาสิ่งต่อไปนี้:
$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
โดยทั่วไปผมพยายามที่จะประกาศฟังก์ชั่น1
และ0
ซึ่งจะเป็น shorthands สำหรับtrue
และfalse
แต่อย่างที่คุณเห็นฉันวิ่งเข้าไปในปัญหาเกี่ยวกับการใช้ชื่อที่เป็นตัวเลขในการทำงาน พฤติกรรมเดียวกันนี้เกิดขึ้นกับชื่อแทนและชื่อสองหลัก
คำถามคือ "ทำไม" มันคือข้อบังคับโดย POSIX? หรือแค่เปลือกหอยที่มีลักษณะคล้ายบอร์น?
0
เป็นtrue
ในเปลือกสคริปต์และ1
เป็นfalse
(จริงๆใด ๆ ที่ไม่ใช่ศูนย์จะถือว่าเป็นเท็จ) ในกรณีที่คนที่อ่านข้อความนี้ไม่ทราบ นี่คือถอยหลังจากภาษาโปรแกรมส่วนใหญ่อื่น ๆ
true
ในเปลือก อย่างไรก็ตามใน$((...))
สถานะการส่งคืนการขยายเลขคณิตถูกพลิก - 1 คือtrue
และ 0 false
สำหรับความสอดคล้องกับไวยากรณ์ภาษา C ลองตัวอย่างเช่นbash -c 'echo $((1==1));echo $((1==2))'
สิ่งที่ฉันพยายามทำนอกคำถามนี้จริง ๆ แล้ว "ย้อนกลับ" พฤติกรรม ดูตัวอย่างสุดท้ายของคำตอบที่นี่เพื่อดูว่าฉันพยายามทำอะไร ความคิดที่โง่เง่า แต่กระนั้นผลงาน