Die einfache Möglichkeit, zu überprüfen, ob eine Zeichenfolge nur Zeichen in einem autorisierten Satz enthält, besteht darin, zu prüfen, ob nicht autorisierte Zeichen vorhanden sind. Anstatt also zu testen, ob die Zeichenfolge nur Leerzeichen enthält, sollten Sie testen, ob die Zeichenfolge andere Zeichen als Leerzeichen enthält. In bash, ksh oder zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
"Besteht nur aus Leerzeichen" schließt den Fall einer leeren (oder nicht gesetzten) Variablen ein.
Möglicherweise möchten Sie nach Whitespace-Zeichen suchen. Verwenden [[ $param = *[^[:space:]]* ]]
Sie diese [[ $param = *[$' \t\n']* ]]
Option , um Gebietsschemaeinstellungen oder eine explizite Liste von Leerzeichen zu verwenden, auf die Sie testen möchten, z. B. um Leerzeichen, Tabulatoren oder Zeilenumbrüche zu testen.
Das Abgleichen einer Zeichenfolge mit einem Muster mit =
inside [[ … ]]
ist eine ksh-Erweiterung (auch in bash und zsh vorhanden). In jedem Bourne / POSIX-Stil können Sie das case
Konstrukt verwenden, um eine Zeichenfolge mit einem Muster abzugleichen. Beachten Sie, dass Standard-Shell-Muster verwendet werden !
, um einen Zeichensatz zu negieren, anstatt ^
wie in den meisten regulären Ausdruckssyntaxen.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Zum Testen auf Leerzeichen ist die $'…'
Syntax spezifisch für ksh / bash / zsh. Sie können diese Zeichen buchstäblich in Ihr Skript einfügen (beachten Sie, dass eine neue Zeile in Anführungszeichen stehen muss, da Backslash + Newline zu nichts erweitert werden) oder sie generieren, z
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
. Wenn Sie alle Leerzeichen entfernen möchten$param
, verwenden Sie${param// /}