case "$1" in
all)
echo "$1"
;;
[a-z][a-z][a-z][a-z][a-z][a-z])
echo "$1"
;;
*)
printf 'Invalid: %s\n' "$3"
exit 1
;;
esac
Com isso, a única entrada aceita é tudo e 6 caracteres. Não aceitará 4 caracteres ou mais de 6.
O que quero fazer aqui é permitir apenas caracteres, não dígitos ou símbolos, mas de comprimento ilimitado.
Qual é a sintaxe correta? Obrigado
dígitos ou símbolos são caracteres. Parece que você quer:
[[:alpha:]]
)a-z
sugere)A menos que a localidade seja C/POSIX, o que
[a-z]
corresponde é mais ou menos aleatóriobash
(pelo menos em sistemas GNU).Para 1, você deseja:
Isso aceitaria
all
,Stéphane
(escrita latina),γράμμα
(escrita grega),письмо
(cirílico), mas nãofoo-bar
,123
...2 pode ser complicado, especialmente se você quiser considerar a combinação de sinais diacríticos.
Para 3, para rodar em qualquer localidade, você precisa especificar os caracteres que deseja:
e na
case
declaração, useOu você pode mudar para
zsh
onde intervalos como[a-zA-Z]
são baseados em pontos de código de caractere, então sempre inclua apenas abcdefghijklmnopqstuvwxyz ou com bash 4.3 ou mais recente , use aglobasciirange
opção para ter o mesmo comportamento embash
.Você pode fazer isso com a correspondência de padrão padrão procurando por qualquer um dos caracteres não permitidos e rejeitando a entrada se encontrar algum. Ou você pode usar globs estendidos (
extglob
) ou regexes e certificar-se explicitamente de que toda a string consiste em caracteres permitidos .globasciiranges
impede[a-z]
a correspondência de letras acentuadas, mas a correspondência regex não a obedece. Com o regex, você precisa definirLC_COLLATE=C
para evitar a correspondência deles.Todos eles permitem a string vazia. Para evitar isso, troque os asteriscos por sinais de adição (
*
a+
).Se você estiver usando
bash
ou equivalente, inclua na parte superior do seu script a linhaset -s extglob
para ativar o globbing estendido (uma forma de expressão regular) e, em suacase
instrução, defina seu seletor como+([[:alpha:]])
, seguido, é claro, pelo)
exigido pelocase
própria declaração.alpha
é uma das várias classes de caracteres definidas nasbash
páginas do manual. Abrange todos os caracteres alfabéticos, maiúsculos e minúsculos, de sua localidade.