Найпростіший спосіб перевірити, чи містить рядок лише символи в авторизованому наборі, - це перевірити наявність несанкціонованих символів. Таким чином, замість тестування, чи містить рядок лише пробіли, перевіряйте, чи містить рядок якийсь символ, крім пробілу. В bash, ksh або zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
"Тільки складається з пробілів" включає випадок порожньої (або знятої) змінної.
Ви можете перевірити наявність будь-якого символу пробілу. Використовуйте [[ $param = *[^[:space:]]* ]]
для налаштувань локалі або явного списку символів пробілів, які ви хочете протестувати, наприклад, [[ $param = *[$' \t\n']* ]]
для перевірки місця, вкладки чи нової лінії .
Узгодження рядка проти шаблону =
зсередини [[ … ]]
- це розширення ksh (також присутнє в bash та zsh). У будь-якому стилі Bourne / POSIX ви можете використовувати case
конструкцію для узгодження рядка з візерунком. Зауважте, що стандартні шаблони оболонок використовують !
для відміни набору символів, а не ^
як у більшості синтаксисів регулярних виразів.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Щоб перевірити наявність символів пробілу, $'…'
синтаксис є специфічним для ksh / bash / zsh; ви можете вписати ці символи у свій сценарій буквально (зауважте, що новий рядок повинен бути в лапках, оскільки кососухий + новий рядок розширюється ні до чого), або генерувати їх, наприклад
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
. Якщо ви хочете видалити всі пробіли$param
, скористайтеся${param// /}