Bir dizginin yalnızca yetkili bir kümedeki karakterleri içerdiğini kontrol etmenin kolay yolu yetkisiz karakterlerin varlığını test etmektir. Bu nedenle, dizenin yalnızca boşluk içerip içermediğini test etmek yerine, dizenin boşluktan başka bir karakter içerip içermediğini test edin. Bash, ksh veya zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
“Yalnızca boşluklardan oluşur”, boş (veya ayarlanmamış) bir değişkenin durumunu içerir.
Herhangi bir boşluk karakteri için test yapmak isteyebilirsiniz. Kullanım [[ $param = *[^[:space:]]* ]]
açık ne olursa olsun, örneğin test etmek istediğiniz boşluk karakterlerinin listesi yerel ayarları veya kullanmayı [[ $param = *[$' \t\n']* ]]
uzay, sekme veya Yenisatır için test etmek.
İpin =
içini bir desene göre eşleştirmek [[ … ]]
, bir ksh uzantısıdır (bash ve zsh da bulunur). Herhangi bir Bourne / POSIX tarzında, case
yapıyı dizeyle kalıpla eşleştirmek için kullanabilirsiniz . Standart kabuk desenlerinin , çoğu normal ifade sözdizimindeki gibi !
değil, karakter kümesini olumsuzlamak için kullandığını unutmayın ^
.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Boşluk karakterlerini test etmek için, $'…'
sözdizimi ksh / bash / zsh; Bu karakterleri tam anlamıyla betiğinize ekleyebilirsiniz (bir yeni satırın ters eğik çizgi + newline hiçbir şeye genişlemediğinden, tırnak içinde olması gerekeceğini unutmayın) veya
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
. Tüm boşlukları kaldırmak istiyorsanız$param
, kullanın${param// /}