Le moyen le plus simple de vérifier qu’une chaîne ne contient que des caractères d’un ensemble autorisé consiste à vérifier la présence de caractères non autorisés. Ainsi, au lieu de vérifier si la chaîne contient uniquement des espaces, vérifiez si la chaîne contient un caractère autre que l'espace. En bash, ksh ou zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
«Ne contient que des espaces» inclut le cas d'une variable vide (ou non définie).
Vous voudrez peut-être tester n'importe quel caractère d'espacement. Utilisez-le [[ $param = *[^[:space:]]* ]]
pour utiliser les paramètres régionaux ou la liste explicite de caractères d'espaces que vous souhaitez tester, par exemple [[ $param = *[$' \t\n']* ]]
pour tester l'espace, la tabulation ou la nouvelle ligne.
Faire correspondre une chaîne avec un motif à l' =
intérieur [[ … ]]
est une extension ksh (également présente dans bash et zsh). Dans n'importe quel style Bourne / POSIX, vous pouvez utiliser la case
construction pour faire correspondre une chaîne à un modèle. Notez que les modèles de shell standard utilisent !
pour nier un jeu de caractères, plutôt que ^
dans la plupart des syntaxes d'expression régulières.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Pour tester les caractères d'espacement, la $'…'
syntaxe est spécifique à ksh / bash / zsh; vous pouvez insérer ces caractères dans votre script de manière littérale (notez qu'un retour à la ligne doit être placé entre guillemets, car la barre oblique inverse + le trait nouveau est réduit à néant), ou les générer, par exemple
whitespace=$(printf '\n\t ')
case "$param" in
*[!$whitespace]*) echo "\$param contains non-whitespace characters";;
*) echo "\$param consists of whitespace only";;
esac
man test
:-z STRING - the length of STRING is zero
. Si vous souhaitez supprimer tous les espaces$param
, utilisez${param// /}