Cara mudah untuk memeriksa bahwa string hanya berisi karakter dalam set yang diotorisasi adalah untuk menguji keberadaan karakter yang tidak sah. Jadi, alih-alih menguji apakah string hanya berisi spasi, uji apakah string berisi beberapa karakter selain spasi. Dalam bash, ksh atau zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
“Terdiri dari spasi saja” termasuk case dari variabel kosong (atau tidak disetel).
Anda mungkin ingin menguji karakter spasi apa saja. Gunakan [[ $param = *[^[:space:]]* ]]
untuk menggunakan pengaturan lokal, atau daftar karakter spasi kosong apa pun yang ingin Anda uji, misalnya [[ $param = *[$' \t\n']* ]]
untuk menguji ruang, tab, atau baris baru.
Mencocokkan string dengan pola =
di dalam [[ … ]]
adalah ekstensi ksh (juga ada dalam bash dan zsh). Dalam gaya Bourne / POSIX apa pun, Anda bisa menggunakan case
konstruk untuk mencocokkan string dengan suatu pola. Perhatikan bahwa pola shell standar digunakan !
untuk meniadakan set karakter, daripada ^
seperti dalam kebanyakan sintaks ekspresi reguler.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Untuk menguji karakter spasi, $'…'
sintaks khusus untuk ksh / bash / zsh; Anda dapat memasukkan karakter-karakter ini dalam skrip Anda secara harfiah (perhatikan bahwa baris baru harus berada dalam tanda kutip, karena garis miring terbalik + baris baru tidak meluas), atau menghasilkannya, misalnya
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
. Jika Anda ingin menghapus semua spasi$param
, gunakan${param// /}