![スペース(タブまたは「」)のみを含む文字列をテストしますか? [コピー]](https://linux33.com/image/30250/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%EF%BC%88%E3%82%BF%E3%83%96%E3%81%BE%E3%81%9F%E3%81%AF%E3%80%8C%E3%80%8D%EF%BC%89%E3%81%AE%E3%81%BF%E3%82%92%E5%90%AB%E3%82%80%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
以下のコードは機能しません。
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