私の言葉は、、、、、などにならなければ$yy
ならないという意味です。2019
2020
2021
$yy
それなら失敗しなければならない20199
201987
4桁の数字のみ可能です。
この状況を確認する方法..
yy =$1
if [ $yy > 4 ] ----- something like this
then
echo "Year should be 4 digits only"
fi
ベストアンサー1
POSIXシェルでは:
case $yy in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
echo OK;;
(*)
echo >&2 not OK;;
esac
次の関数に入れることもできます。
valid_year() case $1 in
([[:digit:]][[:digit:]][[:digit:]][[:digit:]])
true;;
(*)
false;;
esac
次に、if
次の構成で使用します。
if valid_year "$yy"; then
echo OK
else
echo >&2 not OK
fi
ksh93を使用すると、次のように短縮できます。
case $yy in
({4}(\d)) echo OK;;
(*) echo >&2 not OK;;
esac
そしてzsh -o extendedglob
:
case $yy in
([0-9](#c4)) echo OK;;
(*) echo >&2 not OK;;
esac
bash/zsh/ksh93/yash を使用すると、次のものも使用できます。
if [[ $yy =~ [[:digit:]]{4} ]]; then
echo OK
else
echo >&2 not OK
fi
文字単位の変数の長さだけを確認するには、case $yy in (????)
代わりに次のようにします。
if [ "${#yy}" -eq 4 ]; then
echo OK
else
echo >&2 not OK
fi
他のより複雑なPOSIXメソッドは、この[
ユーティリティを使用して、変数の長さが4文字で、数字以外の文字が含まれていないことを確認します。
if [ "${#yy}" -eq 4 ] && [ -n "${yy##*[![:digit:]]*}" ]; then
echo OK
else
echo >&2 not OK
fi