Đ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
, var
lệnh với tham =23
số (ngoại trừ trường zsh
hợp =something
là toán tử đặc biệt mở rộng đường dẫn của something
lệnh. Ở đây, bạn có thể gặp lỗi vì 23
khô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 23
với var=
truyền vào môi trường của nó ( var
biến môi trường có giá trị trống).
var = 23
, var
lệnh với =
và 23
như là đối số. Hãy thử với echo = 23
ví dụ.
Gia đình Csh
csh
và tcsh
. Các phép gán biến có với set var = value
cú pháp cho các biến vô hướng, set var = (a b)
cho các mảng, setenv var value
cho các biến môi trường, @ var=1+1
để gán và đánh giá số học.
Vì thế:
var=23
chỉ đang gọi var=23
lệnh.
var =23
đang gọi var
lệnh với =23
làm đối số.
var= 23
đang gọi var=
lệnh với 23
tư cách là đối số
var = 23
đang gọi var
lệnh với =
và 23
như là đối số.
Gia đình Rc
Đó là rc
, es
và 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 = foo
viết tắt là var = (foo)
(một mảng có một foo
phầ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 fish
sẽ 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 sh
ví dụ : sh -c 'exec weird===cmd'
.
Vì vậy, tất cả var=23
và var= 23
sẽ cung cấp cho bạn một lỗi, var =23
sẽ gọi var
lệnh với =23
tư cách là đối số và var = 23
sẽ gọi var
lệnh với =
và 23
dưới dạng đối số.