Có liên quan, nhưng không trùng lặp với: How to define hash tables in Bash?Làm thế nào để xuất một mảng kết hợp (băm) trong bash?
Tôi có thể xác định và sử dụng băm băm, nhưng tôi không thể xuất nó, ngay cả với cờ -x. Ví dụ, các công trình sau đây để xuất khẩu (và kiểm tra xuất khẩu của) một biến chuỗi bình thường:
[email protected]:/$ export animal_cow="moo"
[email protected]:/$ bash -c "echo \$animal_cow"
moo
[email protected]:/$
Tuy nhiên, nếu tôi cố gắng để xuất khẩu một hash:
[email protected]:/$ declare -A -x animals
[email protected]:/$ animals[duck]="quack"
[email protected]:/$ echo ${animals[duck]}
quack
[email protected]:/$ bash -c "echo \${animals[duck]}"
[email protected]:/$
Dường như vỏ bash lồng nhau không không có hàm băm trong phạm vi của nó. Tôi đã xác minh điều này cũng bằng cách nhập thủ công vào vỏ bash lồng nhau và cố gắng sử dụng hàm băm tương tác.
Đi sâu hơn một chút, môi trường được xác định bởi hệ điều hành; vỏ chỉ cung cấp một cách để cư trú trong môi trường. POSIX (để sử dụng làm ví dụ) không cung cấp một định nghĩa cho dữ liệu có cấu trúc cho các biến môi trường của nó; mỗi giá trị chỉ đơn giản là một chuỗi. Bất kỳ nỗ lực nào bằng 'bash' để chuyển đổi một mảng (thông thường hoặc liên kết) thành một chuỗi đơn lẻ sẽ cụ thể cho' bash'. Điều đó tạo ra một cơn ác mộng về tính di động, vì môi trường không còn được định nghĩa đơn giản bởi hệ điều hành, mà bằng bất kỳ phương thức nào mà bất kỳ người dùng nào có thể quyết định sử dụng để khởi chạy một chương trình. – chepner