2011-04-21 68 views
16

Sự khác nhau giữa === để so sánh các chuỗi trong lập trình shell Linux là gì?Chuỗi lập trình shell Linux so sánh cú pháp

Có lẽ đoạn mã sau hoạt động:

if [ "$NAME" = "user" ] 
then 
    echo "your name is user" 
fi 

Nhưng tôi nghĩ rằng nó không phải là một cú pháp chính xác. Nó sẽ được sử dụng để so sánh chuỗi theo tuyên bố ==.

Điều gì là chính xác?

Trả lời

4

Những trang giải thích các toán tử so sánh khác nhau trong bash:

Trên trang liên kết thứ hai, bạn sẽ tìm thấy:

== 

    is equal to 

    if [ "$a" == "$b" ] 

    This is a synonym for =. 
+2

[này được đưa ra trước] (http://meta.stackexchange.com/questions/15650/ban-lmgtfy-let-me-google-that-for-you -links) Nhận xét này được đưa ra trước khi một số sửa đổi của bạn về câu trả lời của bạn – Diarmaid

+0

@Diarmaid Tôi biết điều này sẽ xảy ra :). Câu trả lời của tôi có thô lỗ không? Có lẽ, chắc chắn, tôi chỉ lãng phí thời gian của tôi đọc một câu hỏi mà mất 10 giây của Googling để tìm câu trả lời. Dù sao, tôi cũng đã dành thời gian để thực sự gõ một câu trả lời đúng. Vì vậy, bây giờ OP cả hai đã nhận được câu trả lời của mình và một lời nhắc nhở nhẹ nhàng để tìm kiếm đầu tiên. – Darhuuk

+0

Ví dụ tech-recipes.com đầu tiên không có tác dụng với tôi do thiếu dấu chấm phẩy (hoặc dòng mới?). – FruitBreak

23

Các bằng đơn là đúng

chuỗi1 == chuỗi2

string1 = string2

Đúng nếu chuỗi đều bình đẳng. ‘=’ Nên được sử dụng với lệnh kiểm tra cho phù hợp POSIX

NAME="rafael" 
USER="rafael" 
if [ "$NAME" = "$USER" ]; then 
    echo "Hello" 
fi 
+1

Tham khảo: http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions – splaer

1

bạn có thể có một cái nhìn here hoặc here. Cá nhân, để so sánh chuỗi, tôi sử dụng case

case "$string1" in 
    "$string2") echo "matched";; 
    *) echo "not matched";; 
esac 

Tôi không cần phải biết được điều hành nên tôi sử dụng

10

Nói chung, toán tử = hoạt động giống như == khi so sánh chuỗi.

Lưu ý: Toán tử so sánh == hoạt động khác trong thử nghiệm dấu ngoặc kép so với trong các dấu ngoặc đơn.

[[ $a == z* ]] # True if $a starts with an "z" (pattern matching). 
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching). 

[ $a == z* ]  # File globbing and word splitting take place. 
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching). 

nguồn: http://tldp.org/LDP/abs/html/comparison-ops.html

+0

Cảm ơn vì điều này! Tôi đã đấu tranh với một vấn đề mà tôi đã sử dụng các dấu ngoặc vuông đơn thay vì gấp đôi. – cbowns