Tiếp theo gián tiếp khi nhận được giá trị của một biến ...
Cách di động là sử dụng eval
. Bạn phải chú ý đến phần trích dẫn để các ký tự đặc biệt trong giá trị không được đánh giá khi chúng không nên. Cách dễ nhất là lưu trữ giá trị mới trong một biến trung gian và gán giá trị của biến đó.
A=B
tmp='stuff with special characters or whatever…'
eval $A=\$tmp
Đối số eval
là B=$tmp
, một nhiệm vụ đơn giản. Bạn không cần dấu ngoặc kép xung quanh $tmp
ngay cả khi nó chứa các ký tự khoảng trắng hoặc toàn cầu, bởi vì chúng không được mở rộng trong một bài tập.
Nếu bạn muốn tạo một biến môi trường, bạn có thể sử dụng export
. Trong bash hoặc ksh hoặc zsh, bạn có thể sử dụng typeset
để tạo biến cục bộ ( declare
đồng nghĩa với bash). Một lần nữa, bạn nên sử dụng một biến trung gian để các ký tự đặc biệt không bị sai lệch. Lưu ý rằng ngoại trừ trong zsh, bạn cần đặt dấu ngoặc kép xung quanh việc mở rộng biến, bởi vì đây không phải là một phép gán mà là một nội dung có một đối số xảy ra giống như một phép gán.
export $A="$tmp"
eval $A=foobar