Vì bạn là người mới đến kịch bản, bạn có thể không biết rằng [[
là một bashism. Bạn có thể thậm chí không biết bashism là gì, nhưng cả hai câu trả lời được đưa ra cho đến nay đang dẫn bạn xuống một con đường hướng tới một tương lai kịch bản đóng thế bằng cách thúc đẩy sử dụng của họ.
Để kiểm tra xem biến có khớp với chuỗi trong bất kỳ hương vị nào của Bourne shell hay không, bạn có thể làm test $V = 14
Nếu bạn muốn so sánh các số nguyên, hãy sử dụng test $V -eq 14
. Sự khác biệt duy nhất là sau này sẽ tạo ra một lỗi nếu $ V không giống như một số nguyên. Có lý do chính đáng để trích dẫn biến (test "$V" = 14
), nhưng dấu ngoặc kép thường không cần thiết và tôi tin là nguyên nhân gốc rễ của một sự nhầm lẫn phổ biến, vì "14"=="14"
giống hệt với "14==14"
nơi rõ ràng hơn là '==' không được sử dụng như một nhà điều hành.
Có một số điều cần lưu ý: sử dụng một đĩa đơn '=' thay vì '==' vì không phải tất cả vỏ nhận '==', lệnh [
giống hệt test
nhưng đòi hỏi một cuộc tranh luận cuối cùng của ]
và nhiều sh hướng dẫn mã hóa khuyên bạn nên sử dụng test
vì nó thường tạo ra mã dễ hiểu hơn, [[
chỉ được nhận dạng bởi số lượng vỏ giới hạn (đây là vấn đề chính của bạn, vì vỏ của bạn dường như không nhận ra [[
và đang tìm lệnh của tên đó. là đáng ngạc nhiên nếu shebang của bạn thực sự chỉ định /bin/bash
thay vì /bin/sh
).
Nguồn
2012-03-12 13:07:24
BTW, không có khoảng trắng, điều này không so sánh từ '14' đến' 14', nó kiểm tra xem chuỗi '14 == 14' có trống không. Nó sẽ cho kết quả chính xác tương tự với '[[" 11 "==" 99 "]]', vì chuỗi đó cũng không rỗng. –