2010-11-02 35 views
13

Tôi cần kiểm tra xem biến có giá trị của chuỗi bắt đầu bằng chuỗi con được chỉ định hay không.KSH kiểm tra xem chuỗi có bắt đầu bằng chuỗi con

Trong Python nó sẽ là một cái gì đó như thế này:

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

cách rõ ràng nhất để kiểm tra trong ksh liệu strig $foo bắt đầu với chuỗi bar là gì?

Trả lời

23

Nó rất đơn giản nhưng trông hơi kỳ quặc:

if [[ "$foo" == abc* ]]; then ... 

Một sẽ giả ksh mà sẽ mở rộng mô hình với các tập tin trong thư mục hiện hành nhưng thay vào đó, nó không phù hợp với mô hình. Tuy nhiên, bạn cần [[. Single [ sẽ không hoạt động. Các dấu ngoặc kép không thật sự cần thiết nếu không có khoảng trống trong foo.

+0

Dấu ngoặc kép bên trong, bạn không cần dấu ngoặc kép ngay cả khi '$ foo' là null hoặc không được đặt. –

+0

Giải pháp trông giống như những gì tôi đang tìm kiếm. Nhưng tiếc là nó không hoạt động trong ksh của tôi. Nó trông giống như ksh88, tôi đoán quá già cho những thủ thuật như vậy. – z4y4ts

+0

Nếu '$ foo' có" = "trong đó thì sao? – user443854

6

Bạn cũng có thể làm khớp regex:

if [[ $foo =~ ^abc ]] 

Đối với mô hình phức tạp hơn, tôi khuyên bạn nên sử dụng một biến thay vì đưa các mô hình trực tiếp trong các thử nghiệm:

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

Ngoài ra:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

+1 cho giải pháp di động –

+1

Bạn chắc chắn không cần biến tạm thời. 'case $ foo in 'abc' *) echo yes ;; esac' – tripleee

+1

di động trở lại solaris 9/bin/sh và @ tripleee's simplification above works – lamont

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