Bạn sẽ có thể phân tích nó một cách dễ dàng với awk hoặc một cái gì đó, nhưng đây là cách tôi muốn làm điều đó:
echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//'
Trong bối cảnh âm vang của bạn:
echo "SANDBOX value is $(echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//')"
Về cơ bản tôi đường ống nội dung của GCC_PREPROCESSOR_DEFINITIONS và grepped ra phần SANDBOX_ENV.
grep -P
là sử dụng chế độ Perl \ d +, vì tôi không thích POSIX. Chỉ là một sở thích. Về cơ bản, những gì
grep -P 'SANDBOX_ENV=\d+'
thực hiện tìm dòng trong nội dung có chứa đường dẫn chứa chuỗi "SANDBOX_ENV =" và bất kỳ số chữ số nào thành công. Nếu giá trị có thể chứa chữ cái và số bạn có thể thay đổi \ d cho chữ số \ w cho chữ trong đó bao gồm a-zA-Z0-9 và bạn nhận được:
grep -Po 'SANDBOX_ENV=\w+'
Các + chỉ có nghĩa là phải có ít nhất một ký tự của loại được chỉ định bởi ký tự trước nó, bao gồm tất cả các ký tự thành công phù hợp.
-o (chỉ phù hợp) trong grep -Po được sử dụng để cô lập kết quả phù hợp để thay vì toàn bộ dòng bạn chỉ nhận được "SANDBOX_ENV = 1".
Đầu ra này sau đó được chuyển đến lệnh sed nơi tôi thực hiện tìm và thay thế đơn giản nơi tôi đã thay thế "SANDBOX_ENV =" bằng "", chỉ để lại giá trị đằng sau nó. Có thể có những cách dễ dàng hơn để làm điều đó giống như với awk, nhưng bạn sẽ phải học rằng chính mình.
Bạn có thể phân tích giá trị bằng chữ của $ {GCC_PREPROCESSOR_DEFINITIONS} không? Bạn có thể thực thi giá trị bằng chữ như một lệnh trong một kịch bản lệnh shell. Sau đó, các biến môi trường shell tương ứng sẽ được đặt thành các giá trị đó. (không thể nhớ cú pháp tắt tay ...) –
Tôi không có ý tưởng về kịch bản lệnh shell. Sẽ cố gắng tìm kiếm các lệnh. –