【问题标题】:Validating user fed time in bash with regex pattern [duplicate]使用正则表达式模式在bash中验证用户喂食时间[重复]
【发布时间】:2014-03-16 07:50:00
【问题描述】:

假设用户喂食时间:

read -p "Enter the start time you want to start(hh:mm:ss) " user_start_time

和正则表达式:

timePattern="[0-2][0-3]:[0-5][0-9]:[0-5][0-9]"

如果我这样做:

if [ "$user_start_time" == "$timePattern" ] 
#or if [ "$user_start_time" =~ "$timePattern" ]
then
         echo "in if"
else
         echo "in else"
fi

它不验证.....作为新手,我了解intstring 的比较,但我们如何处理time日期也在那里,但date -d 解决了很多问题问题)

There is this question too 但无法理解接受的答案!!

【问题讨论】:

  • 您的问题是在[ ... ] 中使用===~。您需要使用双方括号。请参阅链接的问题。
  • @devnull :是的,在你发布的那一刻就提到了它......谢谢伙计! :)
  • @devnull :一个简单的问题,如果我总是在验证中使用[[ 而不是[ 只是为了更安全,这会是一个好习惯吗??
  • 此外,避免使用正则表达式来验证日期/时间。您可能需要参考 this 答案以获取替代方法。
  • 可以,只是[[ 不那么便携!如果你确定你的脚本会在哪里运行,我认为没有什么坏处。

标签: regex bash shell time-format


【解决方案1】:

对于正则表达式匹配,您需要在 BASH 中使用 =~ 运算符而不是 ==。所以像这样使用它:

[[ "$user_start_time" =~ $timePattern ]] && echo "in if" || echo "in else"

您还需要删除正则表达式变量 $timePattern 周围的引号

【讨论】:

  • +1 : 所以我的代码有 2 个错误....Pattern should not be in quotesdouble square brackets ....mmm ......什么时候应该使用双方括号和单方括号??我的意思是有什么标准吗???
  • 作为一个经验法则,在使用 BASH 时总是使用 [[ and ]]。正如您所注意到的 [ and ] 甚至不支持 =~ 运算符。 [ 实际上是一个仍然支持向后兼容目的的命令,但对于 BASH 中的所有实际目的,请使用 [[ and ]],因为它的功能更加丰富和高效。
  • 这不是...谢谢!! :)
  • @MortezaLSC:当然可以:if [[ "$user_start_time" =~ $timePattern ]]; then echo "in if"; else echo "in else"; fi
  • 我删除了我的评论...我发现是的,谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2011-05-11
  • 2011-03-07
  • 2019-06-28
  • 2021-04-20
  • 2018-11-25
  • 2021-02-26
相关资源
最近更新 更多