Điều đó phụ thuộc rất nhiều vào vỏ. Nếu chúng ta chỉ nhìn vào 4 họ vỏ chính (Bourne, csh, rc, fish):
Gia đình Bourne
Đó là vỏ Bourne và tất cả các biến thể của nó và ksh, bash, ash/ dash, zsh, yash.
var=23: đó là cú pháp gán biến chính xác: một từ bao gồm các chữ cái, chữ số hoặc dấu gạch dưới được theo sau bởi một ký tự không được trích dẫn =xuất hiện trước một đối số lệnh (ở đây là chính nó)
var =23, varlệnh với tham =23số (ngoại trừ trường zshhợp =somethinglà toán tử đặc biệt mở rộng đường dẫn của somethinglệnh. Ở đây, bạn có thể gặp lỗi vì 23không chắc là tên lệnh hợp lệ).
var= 23: một nhiệm vụ var=theo sau bởi một tên lệnh 23. Điều đó có nghĩa là thực thi 23với var=truyền vào môi trường của nó ( varbiến môi trường có giá trị trống).
var = 23, varlệnh với =và 23như là đối số. Hãy thử với echo = 23ví dụ.
Gia đình Csh
cshvà tcsh. Các phép gán biến có với set var = valuecú pháp cho các biến vô hướng, set var = (a b)cho các mảng, setenv var valuecho các biến môi trường, @ var=1+1để gán và đánh giá số học.
Vì thế:
var=23chỉ đang gọi var=23lệnh.
var =23đang gọi varlệnh với =23làm đối số.
var= 23đang gọi var=lệnh với 23tư cách là đối số
var = 23đang gọi varlệnh với =và 23như là đối số.
Gia đình Rc
Đó là rc, esvà akanga. Trong các shell đó, các biến là các mảng và phép gán với var = (foo bar), với var = fooviết tắt là var = (foo)(một mảng có một foophần tử) và var =viết tắt cho var = ()(mảng không có phần tử, sử dụng var = ''cho một mảng có một phần tử trống).
Trong mọi trường hợp, khoảng trống (khoảng trắng hoặc tab) xung quanh =được cho phép và tùy chọn. Vì vậy, trong các shell đó, 4 lệnh đó tương đương và tương đương với var = (23)việc gán một mảng với một phần tử 23.
Cá
Trong fish, cú pháp gán biến là set var value1 value2. Giống như trong rc, các biến là mảng.
Vì vậy, hành vi sẽ giống như với csh, ngoại trừ việc fishsẽ không cho phép bạn chạy một lệnh với =tên của nó. Nếu bạn có một lệnh như vậy, bạn cần phải gọi nó qua shví dụ : sh -c 'exec weird===cmd'.
Vì vậy, tất cả var=23và var= 23sẽ cung cấp cho bạn một lỗi, var =23sẽ gọi varlệnh với =23tư cách là đối số và var = 23sẽ gọi varlệnh với =và 23dưới dạng đối số.