检查字符串仅包含授权集中的字符的简单方法是测试是否存在未授权字符。因此,不是测试字符串是否仅包含空格,而是测试字符串是否包含除空格之外的某些字符。在bash,ksh或zsh中:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
“仅由空格组成”包括变量为空(或未设置)的情况。
您可能需要测试任何空白字符。使用[[ $param = *[^[:space:]]* ]]
使用区域设置,或任何明确的,你想测试,如空白字符表[[ $param = *[$' \t\n']* ]]
来测试空间,制表符或换行符。
将字符串与=
内部模式匹配[[ … ]]
是ksh扩展名(也存在于bash和zsh中)。在任何Bourne / POSIX样式中,您都可以使用该case
构造将字符串与模式进行匹配。请注意,标准外壳模式用于!
否定字符集,而不是^
像大多数正则表达式语法一样。
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
为了测试空格字符,$'…'
语法特定于ksh / bash / zsh。您可以按原样在脚本中插入这些字符(注意,换行符必须在引号内,因为反斜杠+换行符扩展为空),或生成它们,例如
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
。如果要删除中的所有空格$param
,请使用${param// /}