เท่าที่ฉันรู้[[เป็นรุ่นปรับปรุง[แต่ฉันสับสนเมื่อฉันเห็น[[ว่าเป็นคำหลักและ[ถูกแสดงเป็น builtin
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDPพูดว่า
builtin อาจเป็นคำพ้องความหมายของคำสั่งระบบที่มีชื่อเดียวกัน แต่ Bash นำมาใช้ใหม่ภายใน ตัวอย่างเช่นคำสั่ง Bash echo ไม่เหมือนกับ / bin / echo แม้ว่าพฤติกรรมของพวกเขาจะเกือบเหมือนกัน
และ
คำหลักคือคำโทเค็นหรือตัวดำเนินการที่สงวนไว้ คำหลักมีความหมายพิเศษกับเชลล์และแน่นอนว่าเป็นหน่วยการสร้างของไวยากรณ์ของเชลล์ เป็นตัวอย่างสำหรับในขณะที่ทำและ! เป็นคำหลัก เช่นเดียวกับ builtin คีย์เวิร์ดนั้นยากที่จะเขียนลงใน Bash แต่ต่างจาก builtin คำสำคัญนั้นไม่ได้อยู่ในคำสั่ง แต่เป็นหน่วยย่อยของคำสั่งสร้าง [2]
ไม่ควรที่จะทำให้ทั้งสอง[และ[[คำหลัก? มีอะไรที่ฉันขาดหายไปที่นี่ไหม? นอกจากนี้ลิงก์นี้ยืนยันอีกครั้งว่าทั้งสอง[และ[[ควรเป็นของประเภทเดียวกัน
if "[" $x -eq 3 ]ทำงานตามที่คาดไว้ (เพราะทุบตีมองหาคำสั่งที่เรียกว่า[และนี้มีอยู่) แต่if "[[" $x -eq 3 ]]ไม่ได้ทำงาน (เพราะอีกครั้งค้นหาทุบตีสำหรับคำสั่งของชื่อที่เหมาะสม แต่ไม่มี[[คำสั่ง)