以下のコードは機能しません。
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
:
==と!=と同じ優先順位を持つ追加の2項演算子=~を使用することもできます。使用すると、演算子の右側の文字列は拡張正規表現として扱われ、それに応じて一致します(regex(3)と同様)。
したがって、正規表現一致演算子は次のようになります=~
。
if [[ "$stringZ" =~ ^[[:blank:]][[:blank:]]*$ ]];then
echo string is blank
else
echo string is not blank
fi
+
正規表現の冗長性を減らすために、数量子(以前のエンティティを1回以上表す)を使用できます。
if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then