kshに入力された変数が英数字であることを確認するには?

kshに入力された変数が英数字であることを確認するには?

AIXではkshを使用しており、変数(例えばvar1=sanySAN)がvar2=SANYsa%$3英数字であることを確認したいと思います。

ここではvar1代わりに英数字ですvar2[a-z][A-Z][0-9]orを使用できることを知っていますが、[:alnum:] 方法がわかりません。

これを確認する必要がありますか?

if [[ var == [:alnum:]* ]] 
then 
    echo "yes"
else 
    echo "no"
fi 

いくつかの方法を試しましたが失敗しました。

ベストアンサー1

フロント:

is_alnum() {
  case $1 in (*[![:alnum:]]*|"") false;; esac
}

それから:

$ is_alnum 123 && echo yes
yes
$ is_alnum % || echo no
no

mksh上記の方法を使用して失敗した唯一のシェルです。


また、変数に有効な文字を形成しない一連のバイトが含まれている場合、この方法は機能しません。

yash有効なUnicode文字としてのみ機能するため、エラーを報告する唯一の文字です。

$ is_alnum $'A\xe9B'
yash: cannot convert the argument `A�B' into a wide character stringyash: the argument is replaced with an empty string

修正する

mkshR56に追加および変更された文字クラスR56c

おすすめ記事