Theo mặc định set
cho thấy biến vỏ , không chỉ các biến môi trường. Trong bash
các chức năng được coi là một phần của các biến. Xem https://askubfox.com/questions/26318/envir-variable-vs-shell-variable-whats-the-difference .
Nếu bạn dùng env
hoặc là printenv
họ sẽ chỉ môi trường xuất sang quy trình con, không phải nhất thiết phải giống như của bạn bash
môi trường:
$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1
Cú đánh declare
và typeset
nội dung có thể liệt kê tất cả các loại biến, để bỏ qua các hàm:
declare -F
Đầu ra của chúng ở dạng phù hợp để tạo lại trạng thái trong tập lệnh shell, do đó, nó hơi dài dòng, mặc dù bạn có thể phân biệt giữa các mảng, số nguyên và các loại khác (tùy thuộc vào phiên bản). Xem thêm đầu ra của export -p
.
Và từ https bạn có thể yêu cầu bash sử dụng chế độ POSIX và set
cư xử "đúng":
( set -o posix ; set )
Nó chạy trong một lớp con để nó không thay đổi lớp vỏ đang chạy của bạn và nó chọn đúng các biến chưa được xuất vào môi trường được kế thừa.