เท่าที่ฉันรู้[[
เป็นรุ่นปรับปรุง[
แต่ฉันสับสนเมื่อฉันเห็น[[
ว่าเป็นคำหลักและ[
ถูกแสดงเป็น 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 ]]
ไม่ได้ทำงาน (เพราะอีกครั้งค้นหาทุบตีสำหรับคำสั่งของชื่อที่เหมาะสม แต่ไม่มี[[
คำสั่ง)