Tôi thích sử dụng các báo cáo trường hợp để so sánh chuỗi.
Một ví dụ nhỏ là
case "$input"
in
"$variable1") echo "matched the first value"
;;
"$variable2") echo "matched the second value"
;;
*[a-z]*) echo "input has letters"
;;
'') echo "input is null!"
;;
*[0-9]*) echo "matched numbers (but I don't have letters, otherwise the letter test would have been hit first!)"
;;
*) echo "Some wacky stuff in the input!"
esac
Tôi đã làm những việc điên rồ như
case "$(cat file)"
in
"$(cat other_file)") echo "file and other_file are the same"
;;
*) echo "file and other_file are different"
esac
Và đó làm việc cũng vậy, với một số hạn chế, chẳng hạn như các tập tin không thể có nhiều hơn một cặp vợ chồng megabyte và trình bao chỉ đơn giản là không thấy null, vì vậy nếu một tệp có đầy null và cái kia không có, (và không có gì khác), kiểm tra này sẽ không thấy bất kỳ sự khác biệt nào giữa hai.
Tôi không sử dụng tệp so sánh làm ví dụ nghiêm trọng, chỉ là ví dụ về cách tuyên bố trường hợp có khả năng thực hiện chuỗi đối sánh linh hoạt hơn nhiều so với thử nghiệm hoặc expr hoặc các biểu thức vỏ tương tự khác.
'$ {var1: 0: 4}' - bạn đã nhận cú pháp đó từ đâu? Nó chắc chắn không phải POSIX. –
Phiên bản cắt của tôi cho biết rằng các vị trí được đánh số bắt đầu từ 1. '' cut -c 1-4'' hoặc '' cut -c -4'' trả lại giá trị chính xác tại đây. – jotr