Najłatwiejszym sposobem sprawdzenia, czy łańcuch zawiera tylko znaki w autoryzowanym zestawie, jest sprawdzenie obecności nieautoryzowanych znaków. Dlatego zamiast sprawdzać, czy łańcuch zawiera tylko spacje, sprawdź, czy łańcuch zawiera znak inny niż spacja. W bash, ksh lub zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
„Składa się tylko ze spacji” obejmuje przypadek pustej (lub nieustawionej) zmiennej.
Możesz przetestować dowolny znak spacji. Użyj, [[ $param = *[^[:space:]]* ]]
aby użyć ustawień regionalnych lub jakiejkolwiek wyraźnej listy białych znaków, które chcesz przetestować, np. [[ $param = *[$' \t\n']* ]]
Aby sprawdzić spację, tabulator lub znak nowej linii.
Dopasowywanie łańcucha do wzorca z =
wnętrzem [[ … ]]
jest rozszerzeniem ksh (występującym również w bash i zsh). W dowolnym stylu Bourne / POSIX możesz użyć case
konstrukcji, aby dopasować ciąg do wzorca. Zauważ, że standardowe wzorce powłoki służą !
do negowania zestawu znaków, a nie ^
jak w większości składni wyrażeń regularnych.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Aby przetestować znaki spacji, $'…'
składnia jest specyficzna dla ksh / bash / zsh; możesz dosłownie wstawić te znaki w skrypcie (pamiętaj, że nowa linia musi znajdować się w cudzysłowach, ponieważ ukośnik + nowa linia rozwija się do zera), lub wygeneruj je, np.
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
. Jeśli chcesz usunąć wszystkie spacje$param
, użyj${param// /}