Cách dễ dàng để kiểm tra xem một chuỗi chỉ chứa các ký tự trong một bộ được ủy quyền là kiểm tra sự hiện diện của các ký tự trái phép. Do đó, thay vì kiểm tra xem chuỗi chỉ chứa khoảng trắng, hãy kiểm tra xem chuỗi có chứa một số ký tự không phải là khoảng trắng hay không. Trong bash, ksh hoặc zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
Chỉ bao gồm các không gian, bao gồm các trường hợp của một không gian trống (hoặc không đặt).
Bạn có thể muốn kiểm tra bất kỳ ký tự khoảng trắng. Sử dụng [[ $param = *[^[:space:]]* ]]
để sử dụng cài đặt ngôn ngữ hoặc bất kỳ danh sách rõ ràng nào về các ký tự khoảng trắng bạn muốn kiểm tra, ví dụ: [[ $param = *[$' \t\n']* ]]
để kiểm tra không gian, tab hoặc dòng mới.
Kết hợp một chuỗi với một mẫu với =
bên trong [[ … ]]
là một phần mở rộng ksh (cũng có trong bash và zsh). Trong bất kỳ kiểu Bourne / POSIX nào, bạn có thể sử dụng case
cấu trúc để khớp chuỗi với mẫu. Lưu ý rằng các mẫu shell tiêu chuẩn sử dụng !
để phủ định một bộ ký tự, thay vì ^
giống như trong hầu hết các cú pháp biểu thức thông thường.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Để kiểm tra các ký tự khoảng trắng, $'…'
cú pháp dành riêng cho ksh / bash / zsh; bạn có thể chèn các ký tự này vào tập lệnh của mình theo nghĩa đen (lưu ý rằng một dòng mới sẽ phải nằm trong dấu ngoặc kép, vì dấu gạch chéo ngược + dòng mới mở rộng thành không có gì) hoặc tạo chúng, ví dụ:
whitespace=$(printf '\n\t ')
case "$param" in
*[!$whitespace]*) echo "\$param contains non-whitespace characters";;
*) echo "\$param consists of whitespace only";;
esac
man test
:-z STRING - the length of STRING is zero
. Nếu bạn muốn xóa tất cả các khoảng trắng trong$param
, hãy sử dụng${param// /}