2012-06-19 27 views
29

Làm thế nào để bạn so sánh hai chuỗi trong Cá (như "abc" == "def" bằng các ngôn ngữ khác)?Kiểm tra chuỗi bình đẳng/so sánh chuỗi trong vỏ Cá?

Cho đến nay, tôi đã sử dụng một sự kết hợp của contains (chỉ ra rằng contains "" $a chỉ trả 0 nếu $a là chuỗi rỗng, mặc dù điều đó đã không có vẻ làm việc cho tôi trong mọi trường hợp) và switch (với một case "what_i_want_to_match"case '*'). Cả hai phương pháp này có vẻ đặc biệt ... đúng vậy.

+5

Vì vậy, chỉ ra '[' thực sự là lệnh ('/ bin/[' trên OS X), ** cũng như ** nội trang Bash, với các cú pháp khác nhau. Đi con số! –

+0

nhận xét này vừa mới làm cho ngày của tôi! Lệnh [là một công cụ thực sự mạnh mẽ. – yagooar

+4

Cá nhân, tôi đã thực sự bắt đầu sử dụng 'test' thay vì' ['trong tất cả các tập lệnh của tôi, để rõ ràng rằng đó là một lệnh bên ngoài và không phải là một phần của ngôn ngữ. ('test' và' ['là công cụ chính xác.) Tất nhiên, tôi nghĩ' test' cũng là một nội trang Bash. –

Trả lời

32
if [ "abc" != "def" ] 
     echo "not equal" 
    end 
    not equal 

    if [ "abc" = "def" ] 
     echo "equal" 
    end 

    if [ "abc" = "abc" ] 
     echo "equal" 
    end 
    equal 

hoặc lót:

if [ "abc" = "abc" ]; echo "equal"; end 
equal 
+1

Aha! Odd, tôi nghĩ rằng tôi đã thử dấu ngoặc vuông trước đây; có lẽ đó là single '=' đã ném tôi. –

+1

Vâng, đơn '=' cũng ném tôi. –

+2

ngắn hơn một lớp lót: '[abc = abc]; và echo bằng " – kzh

8

Đôi khi bạn muốn kiểm tra cho chuỗi rỗng hoặc biến không xác định, đó là falsy trong cá.

set hello "world" 
set empty_string "" 
set undefined_var # Expands to empty string 

if [ $hello ] 
    echo "not empty" # <== 
else 
    echo "empty" 
end 

if [ $empty_string ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

if [ $undefined_var ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

Bạn cũng có thể sử dụng test thay vì [.

Ví dụ thực tế là kiểm tra xem bạn có đang ở trong chi nhánh git hay không.

function git_branch 
    echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||') 
end 

set --local branch_name (git_branch) 

if [ $branch_name ] 
    echo "$branch_name branch checked out" 
else 
    echo "not in a git repo" 
end 
Các vấn đề liên quan