POSIXLY:
is_alnum() {
case $1 in (*[![:alnum:]]*|"") false;; esac
}
Затем:
$ is_alnum 123 && echo yes
yes
$ is_alnum % || echo no
no
mksh
- единственная оболочка, потерпевшая неудачу при описанном выше подходе.
Также обратите внимание, что если переменная содержит последовательности байтов, которые не образуют допустимые символы, этот подход не будет работать.
yash
работает только с допустимыми символами Юникода, поэтому только он сообщает об ошибке:
$ is_alnum $'A\xe9B'
yash: cannot convert the argument `A�B' into a wide character stringyash: the argument is replaced with an empty string