С GNU date
:
d=1456478048306
s=${d%???}
ms=${d#"$s"}
date -d "@$s" +"%F %T.$ms %z"
# or:
date -d "$s.$ms" '+%F %T.%3N %z'
С BSD date
:
date -r "$s" +"%F %T.$ms %z"
С GNU awk
и последние версии mawk
(начиная с 1.3.4 20121129
):
echo 1456478048306 | awk '{
print strftime("%F %T." substr($0,length-2) " %z", substr($0, 1, length-3))}'
Для переносимости, perl
может быть вашим лучшим выбором:
echo 1456478048306 | perl -MPOSIX -lne '
print strftime "%F %T.$2 %z", localtime $1 if /(.+)(.{3})/'
Здесь указывается я предпочитаю более традиционный и менее двусмысленный формат:
2016-02-26 09:14:08.306 +0000
, но, конечно, вы можете настроить формат strftime
по своему усмотрению.
test
неудачное имя для использования, это стандартная утилита для условных тестов . (На самом деле это та же самая команда, что и [
в if [... ]
, просто выглядит как синтаксическая вещь, но на самом деле это обычная команда.)
test
также встроен, например. Bash, поэтому запуск только test
никогда не ищет ваш двоичный файл по пути.
bash$ help test | head
test: test [expr]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary.
[...]
test
без аргументов просто возвращает 1 (false ).
Запуск strace test
не включает встроенную оболочку, поскольку strace
не реализует никаких утилит. Он просто использует то, что находит в вашем PATH
. Обратите внимание, что у вас, вероятно, есть стандартный test
в /bin/test
или /usr/bin/test
, поэтому, если это будет первым в PATH
, strace
запустит это.
В моем Bash which
также является внешней командой, поэтому она также не имеет понятия о встроенных функциях. С другой стороны, команда type
встроена в оболочку, и type test
покажет, что test is a shell builtin
.
См. также:Почему бы не использовать «который»? Что тогда использовать?