มันขึ้นอยู่กับเปลือกหอยเป็นอย่างมาก ถ้าเราดูเฉพาะ 4 เชลล์หลักตระกูล (Bourne, csh, rc, fish):
ครอบครัวบอร์น
นั่นคือเปลือกบอร์นและตัวแปรทั้งหมดและksh
, bash
, ash
/ dash
, ,zsh
yash
var=23
: นั่นคือไวยากรณ์การกำหนดตัวแปรที่ถูกต้อง: คำที่ประกอบด้วยตัวอักษรที่ไม่มีเครื่องหมายอัญประกาศตัวเลขหรือขีดล่างตามด้วยเครื่องหมายอัญประกาศ=
ที่ไม่ปรากฏที่ปรากฏก่อนอาร์กิวเมนต์คำสั่ง (นี่คือตัวของมันเอง)
var =23
ที่var
คำสั่งกับ=23
เป็นอาร์กิวเมนต์ (ยกเว้นในzsh
ที่=something
เป็นผู้ประกอบการพิเศษที่จะขยายไปยังเส้นทางของsomething
คำสั่ง. ที่นี่คุณจะมีแนวโน้มที่จะได้รับข้อผิดพลาดในขณะที่23
ไม่น่าจะเป็นชื่อคำสั่งที่ถูกต้อง)
var= 23
: ได้รับมอบหมายตามด้วยชื่อคำสั่งvar=
23
นั่นหมายถึงการดำเนินการ23
โดยvar=
ส่งผ่านไปยังสภาพแวดล้อม ( var
ตัวแปรสภาพแวดล้อมที่มีค่าว่าง)
var = 23
, var
สั่งอาหารด้วย=
และ23
เป็นอาร์กิวเมนต์ ลองด้วยecho = 23
เช่น
ครอบครัว Csh
csh
tcsh
และ การกำหนดตัวแปรที่มีกับset var = value
ไวยากรณ์สำหรับตัวแปรสเกลาร์set var = (a b)
สำหรับอาร์เรย์setenv var value
สำหรับตัวแปรสภาพแวดล้อม@ var=1+1
สำหรับการกำหนดและการประเมินผลทางคณิตศาสตร์
ดังนั้น:
var=23
เป็นเพียงการเรียกใช้var=23
คำสั่ง
var =23
กำลังเรียกใช้var
คำสั่งด้วย=23
อาร์กิวเมนต์
var= 23
กำลังเรียกใช้var=
คำสั่งด้วย23
อาร์กิวเมนต์
var = 23
กำลังเรียกใช้var
คำสั่งด้วย=
และ23
เป็นอาร์กิวเมนต์
ครอบครัว Rc
ว่าrc
, และes
akanga
ในเชลล์เหล่านั้นตัวแปรคืออาร์เรย์และการกำหนดค่าด้วยvar = (foo bar)
โดยvar = foo
ย่อสำหรับvar = (foo)
(อาร์เรย์ที่มีหนึ่งfoo
องค์ประกอบ) และvar =
สั้นสำหรับvar = ()
(อาร์เรย์ที่ไม่มีองค์ประกอบให้ใช้var = ''
สำหรับอาร์เรย์ที่มีหนึ่งองค์ประกอบที่ว่างเปล่า)
ไม่ว่าในกรณีใดช่องว่าง (เว้นวรรคหรือแท็บ) =
จะได้รับอนุญาตและเป็นตัวเลือก ดังนั้นในเปลือกหอยบรรดาผู้ที่ 4 คำสั่งที่เทียบเท่าและเทียบเท่ากับการที่จะกำหนดอาร์เรย์ที่มีองค์ประกอบหนึ่งเป็นvar = (23)
23
ปลา
ในไวยากรณ์การกำหนดตัวแปรคือfish
set var value1 value2
เช่นเดียวกับในrc
ตัวแปรคืออาร์เรย์
ดังนั้นพฤติกรรมจะเหมือนกันกับcsh
ยกเว้นว่าfish
จะไม่ให้คุณเรียกใช้คำสั่งที่มี=
ชื่อ หากคุณมีคำสั่งดังกล่าวคุณจะต้องเรียกใช้มันผ่านsh
ตัวอย่างเช่น: sh -c 'exec weird===cmd'
.
ดังนั้นทั้งหมดvar=23
และvar= 23
จะทำให้คุณมีข้อผิดพลาดvar =23
จะเรียกvar
คำสั่งด้วย=23
เป็นอาร์กิวเมนต์และvar = 23
จะเรียกvar
คำสั่งด้วย=
และ23
เป็นอาร์กิวเมนต์