Vous pouvez utiliser la syntaxe regex de bash.
Il nécessite que vous utilisiez des crochets doubles [[ ... ]]
, (plus polyvalent, en général).
La variable n'a pas besoin d'être entre guillemets. La regex elle-même ne doit pas être cité
for str in " " "abc " "" ;do
if [[ $str =~ ^\ +$ ]] ;then
echo -e "Has length, and contain only whitespace \"$str\""
else
echo -e "Is either null or contain non-whitespace \"$str\" "
fi
done
Sortie
Has length, and contain only whitespace " "
Is either null or contain non-whitespace "abc "
Is either null or contain non-whitespace ""
Beaucoup de ces réponses sont beaucoup plus complexes ou beaucoup moins lisibles qu'elles ne devraient l'être.
[[ $string = *[[:space:]]* ]] && echo "String contains whitespace"
[[ $string = *[![:space:]]* ]] && echo "String contains non-whitespace"