Một phép gán biến có dạng tên biến, theo sau là dấu bằng, theo sau là giá trị (tùy chọn).
Đây là một nhiệm vụ hợp lệ:
ABC=123
"$x"1=1
không phải là một bài tập hợp lệ, vì "$x"1
không phải là một tên biến. Nó có thể là eval uated để một tên biến, nhưng nó không phải là. Vỏ, trên thực tế, tin rằng nó là một lệnh.
Một cách để làm những gì bạn muốn đạt được là:
eval "$x"1=1
Một cách khác trong bash (nhưng không phải trong các shell khác) là:
declare "$x"1=1
Hoặc cũng (một lần nữa chỉ bash):
let "$x"1=1
(Không có nhiều khác biệt trong trường hợp của bạn.)
Nhưng, như Jakuje đã lưu ý trong các bình luận , có lẽ bạn muốn đi với mảng, nếu vỏ của bạn có chúng (ksh, bash hoặc zsh).
Để hoàn thiện:
eval
thực thi các lệnh tùy ý. Vì vậy, nếu ở phía bên phải của dấu bằng bạn có một biến mở rộng thành một số lệnh, lệnh đó sẽ được thực thi. Các mã sau đây:
x=a
y='$(echo hello)'
eval "$x=$y"
tương đương với a=hello
.
declare
là một bash dựng sẵn để gán các biến và sẽ không thực hiện bất kỳ lệnh nào. Các mã sau đây:
x=a
y='$(echo hello)'
declare "$x=$y"
tương đương với a='$(echo hello)'
.
let
tương tự như declare
ở chỗ nó không thực thi các lệnh. Nhưng trái với declare
, let
có thể được sử dụng cho các hoạt động số học:
let a="1 + 2"
tương đương với a=3
.