Cách di động nhất là export -p
.
export -p
liệt kê các biến xuất khẩu. Điều này thường giống như declare -x
, nếu vỏ của bạn có declare
.
Các vỏ kiểu Bourne hiện đang sử dụng nên hỗ trợ export -p
, theo yêu cầu của POSIX :
Khi -p được chỉ định, xuất sẽ ghi vào đầu ra tiêu chuẩn tên và giá trị của tất cả các biến được xuất, theo định dạng sau:
"export %s=%s\n", <name>, <value>
nếu tên được đặt và:
"export %s\n", <name>
nếu tên không được đặt.
Tiêu chuẩn tiếp tục giải thích rằng giá trị của biến được hiển thị theo cách thường cho phép nó được sử dụng sau này ở phía bên phải của =
một bài tập. Điều này để nói rằng nó có thể được trích dẫn. Các vỏ khác nhau có thể hiển thị chúng khác nhau nhưng có cùng hiệu ứng. export -p
hoạt động ngay cả trong các shell không có declare
nội dung, như Dash .
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
Tôi đã dẫn đầu ra grep
cho gọn nhẹ nhưng nếu bạn không lọc nó thì bạn sẽ có được danh sách đầy đủ các biến đã xuất. Từ câu hỏi của bạn, có vẻ như đó là những gì bạn có thể thấy hữu ích nhất.
Một số hệ vỏ, như Bash, sử dụng định dạng không chuẩn trừ khi được hướng dẫn rõ ràng để hành xử theo cách tuân thủ POSIX. Trong Bash export -p
cho đầu ra giống như declare -x
mặc định.
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
Zsh hiển thị định dạng không chuẩn ngay cả khi bật tính năng tương thích POSIX:
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
Trong mọi trường hợp, bạn có thể trích xuất các biểu diễn di động (có thể được trích dẫn) bằng cách tìm kiếm một từ theo sau =
. Điều này không dựa vào các từ trước đó trên dòng, miễn là chúng không xuất hiện ngay trước =
, điều mà chúng không nên. Ví dụ:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
Lưu ý rằng không phải tất cả các mục nhất thiết phải có =
. Điều này là do các biến có thể không được đặt nhưng được xuất. Các mục đó được lọc ra bằng grep
lệnh trên, có thể hoặc không thể là những gì bạn muốn.
Hầu hết thời gian, bạn chỉ muốn kiểm tra đầu ra và do đó bạn sẽ không quan tâm nếu các mục đều bắt đầu bằng export
, declare -x
, typeset -x
, hay cái gì khác. Sau đó chỉ cần chạy export -p
.
Tôi đã thử nghiệm các lệnh đó trên Ubuntu 16.04 LTS với các phiên bản được đóng gói chính thức của mỗi vỏ.