2013-03-05 35 views
5

Tôi muốn có một danh sách lớn các tùy chọn trong tập lệnh của mình. Người dùng sẽ cung cấp đầu vào sẽ chỉ khớp với một trong các tùy chọn đó. Tôi muốn để có thể có nhiều tùy chọn khác nhau chạy các lệnh tương tự nhưng tôi dường như không thể có được OR làm việc. Dưới đây là những gì tôi nghĩ rằng nó sẽ như thế nào, bất kỳ ý tưởng về cách làm cho a hoặc b dòng làm việc?Làm thế nào để sử dụng một hoặc trong một tuyên bố chuyển đổi tcl?

switch -glob -- $opt { 
    "a" || "b" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

Trả lời

10

Bạn có thể sử dụng - làm cơ thể để rơi vào cơ thể tiếp theo, như được giải thích trong Tcl Manual:

Nếu một cơ quan được quy định như “-” nó có nghĩa là cơ thể cho mẫu tiếp theo cũng nên được sử dụng làm cơ thể cho mô hình này (nếu mẫu tiếp theo cũng có một phần thân của “-” thì phần thân sau đó được sử dụng, và vân vân). Tính năng này giúp bạn có thể chia sẻ một phần duy nhất trong số một số mẫu.

Ngoài ra, nếu lựa chọn của bạn là một chuỗi lớn của nhân vật concatentated, bạn sẽ phải Bookend mẫu lựa chọn của bạn với các kí hiệu, hoặc các trường hợp của bạn sẽ chỉ phù hợp khi opt chỉ chứa một lựa chọn duy nhất:

switch -glob -- $opt { 
    "*a*" - 
    "*b*" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 
+0

Cảm ơn, rằng chính xác là những gì tôi cần biết. – SuperTetelman

1

Có hai cách. Từ the switch documentation examples: "Sử dụng kết hợp toàn cục và phần tử thu gọn là cách thay thế để viết biểu thức chính quy với các thay đổi ..."

0

Cũng làm việc này:

switch -regexp -- $opt { 
    a|b { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

Chú ý: không có khoảng trống giữa "a | b"

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