Thay thế bằng dấu chấm than trong bash


46

Tôi có các dòng sau trong tệp tập lệnh bash .cfg của mình

DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}

làm thế nào là ${!DDF_SOURCE} đánh giá? Nó sẽ là !siebel_DATA_DATE_FORMAT, điều đó không có ý nghĩa với tôi.

Câu trả lời:


65

Đó là một bản mở rộng gián tiếp , được ghi lại trong man bashphần MỞ RỘNG , Mở rộng tham số phụ :

Nếu ký tự đầu tiên của tham số là một dấu chấm than (!), Một mức độ cảm ứng biến được đưa ra. Bash sử dụng giá trị của biến được hình thành từ phần còn lại của tham số làm tên của biến; biến này sau đó được mở rộng và giá trị đó được sử dụng trong phần còn lại của sự thay thế, thay vì giá trị của chính tham số. Điều này được gọi là mở rộng gián tiếp.

bash-4.2$ DDF_SOURCE="siebel_DATA_DATE_FORMAT"

bash-4.2$ siebel_DATA_DATE_FORMAT='Hello Indirect Redirection'

bash-4.2$ DATA_DATE_FORMAT=${!DDF_SOURCE} # siebel_DATA_DATE_FORMAT must get value before this line

bash-4.2$ echo $DATA_DATE_FORMAT
Hello Indirect Redirection
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.