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
この場合、許可される唯一の入力は6文字です。 4文字以上6文字以上は使用できません。
ここでやりたいことは、数字や記号ではない文字だけを許可し、長さに制限を置かないことです。
正しい構文は何ですか?ありがとう
ベストアンサー1
数字またはシンボルキャラクターです。あなたが望むようです:
- 英字のみ(
[[:alpha:]]
) - または、アルファベット文字でも構いませんが、ラテン文字のみが可能です(
a-z
提案どおり)。 - あるいは、発音区別記号なしでラテンアルファベットのアルファベット文字にすることもできます。
ロケールがC / POSIXでない限り、一致はやや[a-z]
ランダムですbash
(少なくともGNUシステムでは)。
1の場合は、次のものが必要です。
die() {
printf >&2 '%s\n' "$1"
exit 1
}
case $string in
("") die "Can't be empty";;
(*[![:alpha:]]*) die "contains non-alphabetical characters";;
(*) echo OK
esac
all
、Stéphane
(ラテン語のアルファベット)、γράμμα
(ギリシャ語のアルファベット)、письмо
(キリル語のアルファベット)は許可されていますがfoo-bar
、123
...は許可されていません。
2はトリッキーかもしれません。具体的には、発音区別符号の組み合わせを検討したい場合はさらにそうです。
3の場合、すべてのロケールで実行するには必須文字を指定する必要があります。
ok=abcdefghijklmnopqstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
case
宣言に使用
(*[!$ok]*) die "contains characters not allowed";;
または、文字コードポイントベースの範囲に切り替えて、zsh
常にabcdefghijklmnopqstuvwxyzのみを含めるか、bash 4.3以降を使用できます。[a-zA-Z]
このglobasciiranges
オプションを使用すると、同じ動作が実行されます。bash
。