${!FOO}
thực hiện thay thế kép bash
, nghĩa là nó lấy giá trị (chuỗi) của FOO và sử dụng nó làm tên biến.
zsh
không hỗ trợ tính năng này.
Có cách nào để làm cho công việc này giống nhau trong bash
và zsh
không?
Lý lịch:
Tôi đã có một danh sách các biến môi trường, như
PATH MAIL EDITOR
và trước tiên muốn in tên biến và sau đó là giá trị của chúng.
Điều này hoạt động trong bash
nhưng không zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Nó có thể bằng cách nào đó có thể là cách khác với cách cũ eval
, nhưng tôi không thể làm cho nó hoạt động được:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Tôi sẽ không bao giờ hiểu lý do tại sao tôi không thể đơn giản thực hiện các thay thế sâu tùy ý như ${${VAR}}
hoặc thậm chí ${${${VAR}}}
nếu cần, vì vậy một lời giải thích cho điều đó cũng tốt.
bash
, nó thực sự có cùng chức năng (và nhiều hơn nữa), chỉ sử dụng một mô hình khác, cụ thể là ${(p)FOO}
.
(e)
cờ mở rộng tham số đã được bổ sung trong zsh-2,6-beta17 (tháng 5 năm 1996), các (P)
lá cờ ở 3.1.5-PWS-7 (1999). bash's ${!var}
in 2.0 (tháng 12 năm 1996).