我的下面的代码不起作用:
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