我最近遇到了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
答案 0 :(得分:2)
支撑扩展不是正确的工具:文字字符串而不是值列表被分配给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
答案 1 :(得分:1)
Brace扩展和正则表达式是不同的东西。大括号扩展扩展为多个元素,而正则表达式匹配模式。
您应该使用数字比较:
if [[ $birthday -ge 19240205 && $birthday -le 19250123 ]]
要使用大括号扩展来执行此操作,您需要与每个元素进行比较:
# Very inefficient, never use this:
for num in {19240205..19250123}
do
if [[ $birthday = $num ]]
then ...