web-dev-qa-db-ja.com

スペース(タブ、または "")のみを含む文字列をテストしますか?

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

stringZ="    "

if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi 

結果:

string is not blank   # wrong

どうすればこれをテストできますか?

4
munish

bash固有のコードは必要ありません:

case $string in
  (*[![:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac
10

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
5
manatwork