1
我的代码有比较var与正则表达式的问题。bash正则表达式格式
的主要问题是问题是在这里
if [[ “$alarm” =~ ^[0-2][0-9]\:[0-5][0-9]$ ]]
这个“如果”是不正确的,我不知道为什么,即使我通过像13:00或08:19的总是假“$报警”值并写入“无效时钟格式”。
当我尝试这个^ [0-2] [0-9]:[0-5] [0-9] $在现场测试正则表达式的工作,例如我用12:20进行了训练。
我开始我的剧本蒙山命令./alarm 11:12 下面是整个代码
#!/bin/bash
masa="`date +%k:%M`"
mp3="$HOME/Desktop/alarm.mp3" #change this
echo "lol";
if [ $# != 1 ]; then
echo "please insert alarm time [24hours format]"
echo "example ./alarm 13:00 [will ring alarm at 1:00pm]"
exit;
fi
alarm=$1
echo "$alarm"
#fix me with better regex >_<
if [[ “$alarm” =~ ^[0-2][0-9]\:[0-5][0-9]$ ]]
then
echo "time now $masa"
echo "alarm set to $alarm"
echo "will play $mp3"
else
echo "invalid clock format"
exit;
fi
while [ $masa != $alarm ];do
masa="`date +%k:%M`" #update time
sleep 1 #dont overload the cpu cycle
done
echo $masa
if [ $masa = $alarm ];then
echo ringggggggg
play $mp3 > /dev/null 2> /dev/null &
fi
exit
你的问题在'$ alarm'周围使用了引号;那些实际在你的代码中,或者是你的问题中的错字?它们会被shell忽略,并被视为与正则表达式匹配的值的一部分,如果过度宽容(它允许像'25:00'这样的时间),这看起来很好。不过,您不需要转义':'。 – chepner
Chepner是正确的。 –