Bash - 根据时间戳格式匹配参数的模式

Bash - Pattern matching an argument against the timestamp format

我有一个脚本,应该将格式的时间戳作为输入:

YYYY-mm-dd HH:mi:ss

我使用以下方法检查输入是否符合模式:

if [[ "" == "-r" && "" == '[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 == \[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\ \[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\} ]]
+ 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 [[ "" == "-r" && "" == '\[0-9]{4}-\[0-9]{2}-\[0-9]{2} \[0-9]{2}:\[0-9]{2}:\[0-9]{2}' ]]

if [[ "" == "-r" && "" == '\(d){4}-\(d){2}-\(d){2} \(d){2}:\(d){2}:\(d){2}' ]]

似乎没有任何效果。您能否指出正确的正则表达式以将参数正确匹配到时间戳格式?谢谢!

使用=~进行正则表达式匹配。 == 用于精确匹配或匹配文件通配模式。不应引用正则表达式;由于您的正则表达式包含 space,因此您需要转义或引用该字符。

if [[ "" == "-r" && "" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]]