以下の私のコードは機能しません:
stringZ=" "
if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
echo string is blank
else
echo string is not blank
fi
結果:
string is not blank # wrong
どうすればこれをテストできますか?
bash
固有のコードは必要ありません:
case $string in
(*[![:blank:]]*) echo "string is not blank";;
("") echo "string is empty";;
(*) echo "string is blank"
esac
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