Eu presumo que por "letras não inglesas" você quer dizer letras que não sejam as 26 letras sem adorno do alfabeto latino. Então, estritamente falando, aqui está um teste que atende aos seus requisitos:
if tmp=${WD//[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/};
[[ $tmp = *[[:alpha:] ]* ]]; then
# $WD contains letters other than A-Z and a-z or a space
Ou seja, tire as letras inglesas e veja se ainda há letras ou espaços.
Suspeito que você esteja realmente tentando evitar todos os caracteres não-ASCII e todos os espaços em branco, incluindo os que não são letras, como ¿
ou £
ou ٣
. Você pode fazer isso combinando os caracteres que não são !
a ~
(ou seja, os caracteres ASCII que não sejam whitespace):
if (LC_ALL=C; [[ $WD = *[^!-~]* ]]) then …
Observe que intervalos como !-~
ou A-Z
don ' Sempre faça o que você espera quando tiver LC_COLLATE
set. Por isso, definimos LC_ALL
como um valor conhecido ( LC_ALL
supera todos locale configurações).
Se você estiver verificando caracteres “incomuns” em arquivos (por que mais excluir até espaços, o que é permitido na maioria das plataformas modernas), pode fazer sentido ter uma lista mais restrita que não permita caracteres não portáteis. POSIX só permite letras ASCII, dígitos e -._
.
if (LC_ALL=C; [[ $WD = *[^-._0-9A-Za-z]* ]]) then …