Chỉ thay thế các biến cụ thể bằng envsubst


53

Tôi đang cố gắng thực hiện thay thế biến môi trường thông qua envsubst, nhưng tôi muốn chỉ thay thế các biến cụ thể.

Từ các tài liệu tôi có thể nói envsubstchỉ thay thế một số biến nhất định nhưng tôi không thể làm điều đó.

Ví dụ: nếu tôi có tệp chứa:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

Tôi nên thực hiện envsubstnhư thế nào để nó chỉ thay thế tham chiếu ${VAR_1}?

Câu trả lời:



131

Trên trang người đàn ông:

envsubst [OPTION] [SHELL-FORMAT]

Nếu SHELL-FORMAT được đưa ra, chỉ những biến môi trường được tham chiếu trong SHELL-FORMAT được thay thế; mặt khác, tất cả các tham chiếu biến môi trường xảy ra trong đầu vào tiêu chuẩn được thay thế.

Trong đó các chuỗi SHELL-FORMAT là "các chuỗi có tham chiếu đến các biến shell trong biểu mẫu $variablehoặc ${variable}[...] Các tên biến phải chỉ bao gồm các ký tự ASCII chữ và số, không bắt đầu bằng một chữ số và không trống, nếu không thì tham chiếu biến đó là làm ngơ." .
Vì vậy, người ta phải chuyển các tên biến tương ứng envsubstvào một chuỗi định dạng shell (rõ ràng, chúng cần phải được thoát / trích dẫn để được truyền theo nghĩa đen envsubst). Thí dụ:

tập tin đầu vào, vd infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

và một số giá trị như

export  VAR1="one" VAR2="two" VAR3="three"

sau đó chạy

envsubst '${VAR1} ${VAR3}' <infile

hoặc là

envsubst '${VAR1},${VAR3}' <infile

hoặc là

envsubst '${VAR1}
${VAR3}' <infile

đầu ra

VAR1=one
VAR2=${VAR2}
VAR3=three

Hoặc, nếu bạn thích dấu gạch chéo ngược:

envsubst \$VAR1,\$VAR2 <infile

sản xuất

VAR1=one
VAR2=two
VAR3=${VAR3}

14
Tại sao đây không phải là câu trả lời được chấp nhận?
Qsiris

3
Vâng, đây là câu trả lời đúng!
Thomas Decaux

3
Nếu bạn biết một tiền tố biến được sử dụng để giới hạn các biến có thể được thay thế:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
Sam Liddicott

Hoặc nếu bạn có một danh sách về chúng SUBST_VARSsau đó:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
Sam Liddicott
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.