2010-03-19 40 views
27

Tôi có một câu hỏi vô lý do một vấn đề vô lý.UNIX, nhận biến môi trường

Thông thường nếu tôi muốn nhận được các nội dung của một biến môi trường trong UNIX shell, tôi có thể làm

echo ${VAR} 

Giả sử, do tình hình lố bịch của tôi, rằng đây là điều không thể.

Làm cách nào để lấy nội dung của biến môi trường để xuất chuẩn, mà không có ai đang xem chính lệnh đó (không phải đầu ra), hãy xem giá trị của biến môi trường.

Tôi có thể hình dung giải pháp là một cái gì đó như echo env(NAME_OF_VAR) mặc dù tôi dường như không thể tìm thấy nó. Các giải pháp đã làm việc trong sh.

PS Tôi không thể viết một kịch bản cho điều này, nó phải là một xây dựng trong lệnh unix (tôi biết, vấn đề vô lý)

Cảm ơn (và xin lỗi vì sự phi lý)

+11

Mike, bạn có sao không? Bạn có bị một khẩu súng bắn vào đầu bởi mafia trong một số nhà kho không? Đây có phải là lời cầu xin giúp đỡ không? –

+0

Có vấn đề gì? Một bàn phím mà '{' là vô hình/không thể truy cập? –

+1

@Tim .. tình hình của tôi gần như là xấu. Nhưng bây giờ, tôi là OK – Mike

Trả lời

39

printenv VARIABLE_NAME

+0

Ooh, một cái gì đó trong/usr/ucb. Ấn tượng. – pra

2

Làm thế nào về điều này:

myVariable=$(env | grep VARIABLE_NAME | grep -oe '[^=]*$'); 
+0

thực sự bạn có thể sử dụng tốt hơn việc cắt giảm ở cuối ví dụ: ... | cut -d '=' -f2- –

4

bạn có nghĩa là một cái gì đó như thế này:

ENV() { 
    printf 'echo $%s\n' $1 | sh 
} 

này hoạt động i n vỏ Bourne cũ.

+0

Tôi muốn sử dụng nhiều trích dẫn hơn: 'ENV() {printf 'printf" %% s \\ n "" $ {% s} "\ n'" $ 1 "| sh; } ' –

1

Các giải pháp thực sự phụ thuộc vào những gì các hạn chế là lý do tại sao bạn không thể sử dụng đơn giản $VAR. Có lẽ bạn có thể gọi một lớp vỏ mà không có những hạn chế và để cho tiểu vỏ này đánh giá các biến:

bash -c 'echo $VAR' 
4

loại lệnh sau trong terminal, nó sẽ hiển thị tất cả các danh sách các biến môi trường

printenv

tại in biến truy nã như thế này:

echo $ VARIABLENAME

0
(set -o posix ; set) | grep $var 
+0

Chỉ có các câu trả lời mã không được khuyến khích trên StackOverflow. Hãy cố gắng giải thích một chút về lý do tại sao đây là câu trả lời đúng – Mittal

+0

Luôn nhớ thêm giải thích cho câu trả lời bạn đăng, để người dùng có thể hiểu việc sử dụng câu trả lời. @ user3061097 – LuFFy

Các vấn đề liên quan