测试仅包含空格(制表符或“”)的字符串?

测试仅包含空格(制表符或“”)的字符串?

我的下面的代码不起作用:

stringZ="    "

if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi 

结果:

string is not blank   # wrong

我该如何测试这个?

答案1

无需bash特定代码:

case $string in
  (*[![:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac

答案2

man bash

还可以使用附加二元运算符 =~,其优先级与 == 和 != 相同。使用时,运算符右侧的字符串被视为扩展正则表达式并进行相应匹配(如 regex(3) 中)。

所以正则表达式匹配运算符应该是=~

if [[ "$stringZ" =~ ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi

+您可以使用量词(表示前一个实体 1 次或多次)来减少正则表达式的冗长性:

if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then

相关内容