2012-06-29 22 views
5

Tại sao các câu lệnh có điều kiện trong các kịch bản tự động cấu hình tiền tố các biến của chúng bằng "x"? Ví dụ, vĩ mô được cung cấp bởi GNU để kiểm tra Boost có điều kiện nhưTại sao điều kiện trong tập lệnh autoconf tiền tố biến với "x"?

if test "x$want_boost" = "xyes"; then 

Tại sao điều này không được định nghĩa như sau:

if test "$want_boost" = "yes"; then 

Trả lời

7

Trong một số vỏ sớm, thử nghiệm cho một chuỗi rỗng biến wasn' t dễ dàng như bây giờ, vì vậy cách tốt nhất là xem "biến $ x" có bằng "x" hay không. Ngoài ra, vì điều đó rõ ràng là sử dụng test, điều đó đơn giản hơn việc cố gắng trích xuất/thoát chuỗi đúng cách như '$ x! = "Y"' mà không làm mất tính chính xác và/hoặc tính di động.

+2

Để làm rõ: "không dễ như bây giờ" có nghĩa là nhiều hệ vỏ bị lỗi và sẽ không đánh giá đúng các lệnh bằng chuỗi rỗng như 'test" "=" foo "' –

+1

Lý do * khác * này cần thiết là nếu '$ variable' mở rộng đến một cái gì đó bắt đầu bằng dấu gạch ngang,' kiểm tra' có thể giải thích rằng đó là một tùy chọn chứ không phải là một chuỗi được so sánh. Trong vỏ hiện đại, dấu bằng được ưu tiên, nhưng nó không phải luôn luôn như vậy. – zwol

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