Làm thế nào tôi có thể liệt kê tất cả các biến shell?


18

Đọc về câu hỏi này: Trong zsh làm thế nào tôi có thể liệt kê tất cả các biến môi trường? , Tôi tự hỏi, làm thế nào tôi có thể liệt kê tất cả các biến shell ?

Ngoài ra, sự phân biệt giữa các biến shell và biến môi trường có áp dụng cho các shell khác với zsh không?

Tôi chủ yếu quan tâm đến Bash và Zsh, nhưng sẽ thật tuyệt khi biết cách làm điều này trong các vỏ chính khác.

Câu trả lời:


21

Liệt kê tất cả các biến shell

bash: sử dụng set -o posix ; set. Các tùy chọn POSIX có mặt để tránh xuất quá nhiều thông tin, như định nghĩa hàm. declare -pcũng hoạt động.

zsh : sử dụng typeset

Biến Shell và biến môi trường

Một biến môi trường có sẵn cho exec()các tiến trình con -ed (dưới dạng bản sao. Nếu tiến trình cha thay đổi biến, môi trường con không được cập nhật). Một biến phi môi trường chỉ có sẵn cho lớp vỏ đang chạy và lớp con fork()-ed hiện tại . Sự phân biệt này có mặt trong tất cả các vỏ.

(hoàn thành nhờ ý kiến)


declare -plàm tương tự
Costas

Câu hỏi cũng có câu trả lời ở đây: stackoverflow.com/questions/1305237/ trên
Uriel

1
set -o posixkhông tồn tại trong zsh; setkhông định nghĩa hàm đầu ra.
vinc17

1
set -o posixlà một lỗi cú pháp trong hầu hết các shell.
mikeerv

3
Biến Shell cũng có sẵn trong các quy trình con. Sự khác biệt xuất hiện khi tiến trình con thực thi một chương trình mới: các biến môi trường được truyền cùng exec, các biến shell thì không.
Barmar

7

Có nhiều lựa chọn thay thế:

printenv

In các giá trị của môi trường được chỉ định VARIABLE (s). Nếu không có VARIABLE nào được chỉ định, hãy in các cặp tên và giá trị cho tất cả chúng.

env

env - chạy chương trình trong môi trường đã sửa đổi

xuất khẩu

Đặt một biến môi trường. Đánh dấu mỗi tên được truyền cho các tiến trình con trong môi trường .....

-p Hiển thị đầu ra ở dạng có thể được sử dụng lại làm đầu vào.

Nếu không có tên nào được cung cấp hoặc nếu tùy chọn `-p 'được đưa ra, một danh sách các tên được xuất sẽ được hiển thị.

bộ

cũng hữu ích để có được các biến shell.

Nếu bạn cần thêm thông tin (số nguyên, xuất), thay vào đó bạn nên sử dụng

sắp chữ

xuất khẩu có một lợi thế, rằng đầu ra của nó có thể được đọc lại ngay trên vỏ.

Cuối cùng, có

compgen -v

Hiển thị hoàn thành có thể tùy thuộc vào các tùy chọn.

trong đó hiển thị tất cả các biến, vỏ và môi trường, không có giá trị hoặc thông tin bổ sung của chúng. Bạn sẽ phải lặp lại $ VARIABLE_NAME để tìm giá trị biến. Nhưng ít nhất danh sách đã hoàn thành. Nó thuộc về bash , không phải zsh .


1
exportsetít nhất không có lợi thế hơn khi nói đến việc trích dẫn để nhập lại shell. Và printenvenvkhông phải là ở tất cả về các biến shell, mặc dù những làm thường trùng với các biến môi trường.
mikeerv

3

Với zsh, bạn có thể sử dụng typeset, cung cấp nhiều thông tin hơn set, ví dụ như loại biến. Bạn vẫn có thể lọc đầu ra với grephoặc sed, tùy thuộc vào những gì bạn muốn. Các biến môi trường được đánh dấu như exportedtrong đầu ra.

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.