我的意思是$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 shell 中:
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