日付パターンを一致させるためにコマンドを使用しようとしましたが、case機能しません。誰でも私を助けることができますか?

入力する01/05/1900 または5/6/1900

使用されたケースの説明:

ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"

case "$dt" in 
    $ptn ) echo "valid pattern" ;;
    *) echo "invalid"
esac

ただし、Caseステートメントで使用されているパターンは、上記の2つの日付入力を評価しません。

ベストアンサー1

この試み。 caseグローバル変数だけが理解されるため、正規表現を扱うのは簡単ではありません。しかし、キャリアは=~ここにいくつかの解決策を持っています。

#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
    echo valid pattern
else
    echo invalid
fi

正規表現のサイズを小さくしたい場合も^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$同様です。

おすすめ記事