У меня есть сценарий, который должен принять в качестве входных данных метки времени в формате:Bash - шаблон согласование аргумента против формата метки времени
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}' ]]
Если он не соответствует шаблону, он должен выдать ошибку. Я включил протоколирование Баша, и передал следующее в качестве входных данных:
./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 [[ "$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}' ]]
Ничто не работает. Не могли бы вы указать мне правильное регулярное выражение для правильного соответствия параметра методу timestamp? Благодаря!
'==' тесты против шаблонов шаблонов файлов. Используйте '= ~' для проверки на regexp. – Barmar
@ Бармар: Я тоже это сделал. Без изменений. – CodingInCircles