Вот чистое решение bash для разделения строки спецификации метки времени:
SPEC='Image timestamp : 2010:07:27 17:38:52'
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<${SPEC//:/ }
echo $YEAR
echo $MONTH
echo $DAY
echo $HOUR
echo $MINUTE
echo $SECOND
Приведенное выше решение преобразует двоеточия в пробелы в спецификации, разбивает их на пробелы и помещает каждый элемент в соответствующую переменную.
Решение, включающее awk, sed или Perl, будет аналогичным, реализуя разделение меток времени на одном из этих языков.
Я рекомендую решение чисто bash, потому что оно быстрее (не имеетпорождать подпроцесс), и он не имеет внешних зависимостей.В настоящее время (по сравнению с Bourne Shell в 1970-х годах) большинство манипуляций со строками и массивами можно выполнять в самом bash, без необходимости форкать и выполнять expr, tr, sed, awk, perl, cut и т. Д.
С Perl:
SPEC='Image timestamp : 2010:07:27 17:38:52'
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<$(perl -pe 'y@:@ @' <<<$SPEC)
echo $YEAR
echo $MONTH
echo $DAY
echo $HOUR
echo $MINUTE
echo $SECOND
С tr:
SPEC='Image timestamp : 2010:07:27 17:38:52'
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<$(tr : ' ' <<<$SPEC)
echo $YEAR
echo $MONTH
echo $DAY
echo $HOUR
echo $MINUTE
echo $SECOND
С sed:
SPEC='Image timestamp : 2010:07:27 17:38:52'
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<$(sed 's/:/ /g' <<<$SPEC)
echo $YEAR
echo $MONTH
echo $DAY
echo $HOUR
echo $MINUTE
echo $SECOND
С AWK:
SPEC='Image timestamp : 2010:07:27 17:38:52'
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<$(awk '{gsub(/:/," ");print}' <<<$SPEC)
echo $YEAR
echo $MONTH
echo $DAY
echo $HOUR
echo $MINUTE
echo $SECOND