Gián tiếp mở rộng các biến trong shell


9

Tôi cần phải gián tiếp tham chiếu một biến trong bashshell.

Về cơ bản tôi muốn những gì bạn có thể làm makebằng cách viết $($(var)).

Tôi đã thử sử dụng ${$var}đó sẽ là giải pháp đơn giản nhất bashnhưng sau đó tôi gặp lỗi này:

bash: ${$var}: bad substitution

Có cách nào để làm việc này không?

Những gì tôi đang cố gắng làm là để lặp qua tất cả các đối số ( $1, $2, $3, ...) cho một chương trình sử dụng một biến lặp và tôi không thể làm điều này mà không cần gián tiếp.

Câu trả lời:


13

Nếu bạn có var1=foofoo=bar, bạn có thể nhận được barbằng cách nói ${!var1}. Tuy nhiên, nếu bạn muốn lặp lại các tham số vị trí, gần như chắc chắn sẽ tốt hơn để làm

for i in "$@"; do
    # something
done

Có cách nào để thêm nhiều cấp độ không?
wefwefa3

1
Không phải là tôi có thể nhanh chóng tìm thấy. Dự đoán rõ ràng là ${!!var1}không hoạt động. Tuy nhiên, bạn luôn có thể làm điều đó bằng tay, ví dụ tmp=${!var1}; echo ${!tmp}.
Tom Hunt

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.