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

mun*_*ish 4 shell string shell-script test

我下面的代码不起作用:

stringZ="    "

if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi 
Run Code Online (Sandbox Code Playgroud)

结果:

string is not blank   # wrong
Run Code Online (Sandbox Code Playgroud)

我该如何测试?

Sté*_*las 10

无需bash特定代码:

case $string in
  (*[![:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac
Run Code Online (Sandbox Code Playgroud)


man*_*ork 5

来自man bash

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

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

if [[ "$stringZ" =~ ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi
Run Code Online (Sandbox Code Playgroud)

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

if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then
Run Code Online (Sandbox Code Playgroud)