我最近在bash练习中遇到了问题,这是创建一个脚本以检查用户输入的日期是否与我的某些日期匹配。
要对其进行更多分解,我的练习是为了检查图案匹配与支撑式扩展,但这非常棘手,因为我在下面尝试了这些行,但它们都没有用。我希望你们能帮助我。
echo -e "Enter your birthday: c"
read birthday
WoodRat={19240205..19250123}
if [[ $birthday =~ $WoodRat ]]; then
echo "Your Chinese Zodiac is: Wood Rat "
else
echo "Sorry, cant find any matches."
fi
撑杆扩展不是正确的工具:将字符串而不是值列表分配给 WoodRat
,而 {19240205..192501123}
并不是测试值是否在一个值中的正则表达式范围。您最好使用明确的最小值和最大值:
WoodRat=(19240205 19250123)
if (( birthday >= ${WoodRat[0]} && birthday <= ${WoodRat[1]} )); then
echo "Your Chinese Zodiac is: Wood Rat "
else
echo "Sorry, cant find any matches."
fi
支撑扩展和正则表达式是不同的。支撑扩展扩展到多个元素,而REGEX匹配模式。
您应该使用数值比较:
if [[ $birthday -ge 19240205 && $birthday -le 19250123 ]]
要通过撑杆扩展来进行,您需要与每个元素进行比较:
# Very inefficient, never use this:
for num in {19240205..19250123}
do
if [[ $birthday = $num ]]
then ...