我有一个脚本应该作为输入接收格式的时间戳:
YYYY-mm-dd HH:mi:ss
我使用以下内容检查输入是否符合模式:
if [[ "$1" == "-r" && "$2" == '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' ]]
如果它与模式不匹配,则应该抛出错误。我打开了bash日志记录,并将以下内容作为输入传递:
./meta_script_test.sh -r '2014-01-01 00:00:00'
bash -x
声明生成的日志显示:
[[ 2014-01-01 00:00:00 == \[\0\-\9\]\{\4\}\-\[\0\-\9\]\{\2\}\-\[\0\-\9\]\{\2\}\ \[\0\-\9\]\{\2\}\:\[\0\-\9\]\{\2\}\:\[\0\-\9\]\{\2\} ]]
+ usage 'Timestamp is in an improper format. Please enter it as: YYYY-mm-dd 00:00:00, and try again'
+ cat
Usage: ./meta_script_test.sh -r 'timestamp'
-r for reset is used to manually pass a date in timestamp format in case of data corruption for creating the delta table.
Example: ./meta_script_test.sh -r '2014-01-01 00:00:00'
我尝试了if语句的各种组合,如:
if [[ "$1" == "-r" && "$2" == '\[0-9]{4}-\[0-9]{2}-\[0-9]{2} \[0-9]{2}:\[0-9]{2}:\[0-9]{2}' ]]
和
if [[ "$1" == "-r" && "$2" == '\(d){4}-\(d){2}-\(d){2} \(d){2}:\(d){2}:\(d){2}' ]]
似乎没有任何效果。你能指点我正确的正则表达式,以正确匹配时间戳格式的参数吗?谢谢!
答案 0 :(得分:2)
使用=~
执行正则表达式匹配。 ==
用于完全匹配或匹配文件通配模式。不应引用正则表达式;由于你的正则表达式包含一个空格,你需要转义或引用该字符。
if [[ "$1" == "-r" && "$2" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]]