Sử dụng sau đây bash's printf %q
để thoát khỏi giá trị chính xác bất kể nội dung của chúng. Nó được đảm bảo để xử lý theo nghĩa đen mọi giá trị có thể - dấu ngoặc kép, dòng mới, v.v., miễn là hệ điều hành được sử dụng hỗ trợ cơ sở /proc/self/environ
đầu tiên được cung cấp bởi Linux để phát ra nội dung của môi trường dưới dạng luồng được phân tách bằng NUL. Nó sử dụng các hình thức trích dẫn đặc biệt như $'\n'
và khi thích hợp, do đó đầu ra của nó có thể không được các trình thông dịch POSIX tinh khiết tôn trọng.
#!/usr/bin/env bash
while IFS= read -r -d '' kvname; do
k=${kvname%%=*}
v=${kvname#*=}
printf '%q=%q\n' "$k" "$v"
done </proc/self/environ
Lưu ý rằng bạn sẽ muốn nguồn sản lượng, không chạy nó như một thực thi bên ngoài, nếu bạn muốn môi trường shell hiện tại của bạn để thay đổi. Nếu bạn không muốn set -a
trước khi tìm nguồn cung ứng, hãy thêm export
hàng đầu vào chuỗi định dạng.
Nguồn
2014-11-26 00:58:44
Chạy kịch bản mà không làm rất nhiều, tuy nhiên, cho là càng sớm càng hoàn thành công việc chạy nó thoát, và không làm thay đổi môi trường mẹ của một chút. 'source my_env' có ý nghĩa hơn, nhưng không yêu cầu' chmod + x'. –
điểm tốt loại bỏ các + x là tiếng ồn của nó –