Process String variable

Posted: March 3, 2011 by Hacking & Relax in Linux

Để xử lý các biến String có nhiều cách khác nhau, ở đây xin đưa ra 2 phương pháp khá đơn giản. Đó là: pattern matching và substituation. Ở đây ta giả sử có 1 biến $foo lưu giá trị “this is a test”

1. Pattern matching

Phương pháp này có thể match theo chiều trái sang hoặc phải sang. Công thức sử dụng như sau:

– Cấu trúc 1: ${foo#t*is}

Chức năng: xóa cụm từ tìm thấy ngắn nhất có thể tính từ trái sang. Ở đây từ cần tìm (pattern) là “t*is”, tức là từ bắt đầu là t và kết thúc là is

Kết quả: ” is a test”

– Cấu trúc 2: ${foo##t*is}

Chức năng: xóa cụm từ tìm thấy dài nhất có thể tính từ trái sang.

Kết quả: ” a test”

– Cấu trúc 3: ${foo%t*st}

Chức năng: xóa cụm từ tìm thấy ngắn nhất có thể tính từ phải sang. Ở đây cụm từ cần tìm là “t*st”, tức là từ bắt đầu bằng t và kết thúc bằng st.

Kết quả: “this is a ”

– Cấu trúc 4: ${foo%%t*st}

Chức năng: xóa cụm từ tìm thấy dài nhất có thể tính từ phải sang.

Kết quả: “”

Lưu ý: Để dễ nhớ, có thể thấy trên bàn phím, phím # nằm bên trái phím $ còn phím % nằm bên phải, và tương ứng # tính từ trái còn % tính từ phải.

2. Substituation

Có 4 công thức cũng thường được sử dụng trong Bash để xử lý biến String.

– Công thức 1: ${foo:-bar}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về $foo, ngược lại trả về giá trị “bar”, còn biến $foo vẫn giữ nguyên giá trị

– Công thức 2: ${foo:=bar}

Chức năng: Nếu biến $foo tồn tại và khác null trả về $foo, ngược lại trả về giá trị “bar” đồng thời set foo=”bar”

– Công thức 3: ${foo:+bar}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về giá trị “bar”, ngược lại trả về null

– Công thức 4: ${foo:?"error message"}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về $foo, ngược lại thì in ra chuỗi sau ? (ở đây là “error message”)

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s