スペース(タブまたは「」)のみを含む文字列をテストしますか? [コピー]

スペース(タブまたは「」)のみを含む文字列をテストしますか? [コピー]

以下のコードは機能しません。

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

関連情報