Могут быть только одно объяснение: Вы находитесь в Украине.
Позвольте мне объяснить:
Date
, эти значения основаны на локальном часовом поясе компьютера, на котором выполняется код. Помня о том, что месяцы основаны на нуле, new Date(1924,4,1,0,0,0,0)
запрашивает местное время 1924-05-01 00:00:00.000
по местному времени . .getTime()
запрашивает отметку времени Unix в миллисекундах, которые основаны в UTC - поэтому происходит неявное преобразование с локального времени в UTC. Поэтому каждый, кто запускает этот код, будет получать разные результаты в зависимости от своего собственного часового пояса. -1441245724000
переводится в 1924-04-30 21:57:56
UTC. Поскольку он был получен из локального времени полуночи, то по математике - смещение от UTC в это локальное время должно быть +02:02:04
. +02:02:04
Europe/Kiev
, , как показано здесь . По причинам, в которых я точно не уверен, TZDB также назначает аббревиатуру KMT
(время по Киеву) с 1880 по 1924 год. Что касается того, почему вы видите это на более новых версиях Chrome - вполне вероятно, что более старые версии не учитывали весь TZDB, но урезали его в какой-то момент в прошлом. Действительно, стандарт ECMAScript 5.1 использовался, чтобы требовать применения только текущего правила часового пояса, как если бы оно действовало на все время. Это было удалено в ECMAScript 6, и большинство браузеров теперь используют правильное правило, которое действовало для предоставленной метки времени.
TL; DR : Местное время в Украине до 1 мая 1924 года была определена солнцем - не правительством. По крайней мере, это самая известная информация о вашем компьютере.
Вместо этого вы можете использовать printf
:
printf "hello\nworld\n"
printf
имеет более последовательное поведение, чем echo
. Поведение echo
сильно различается в разных версиях.
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Вы также можете использовать эхо с фигурными скобками,
$ (echo hello; echo world)
hello
world
Вы уверены, что находитесь в bash? Работает для меня всеми тремя способами:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
POSIX 7 на echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определено, а обратные косые черты определены реализацией:
Если первый операнд равен -n, или если какой-либо из операндов содержит символ & lt; обратного слэша, результаты определяются по реализации.
blockquote>, если у вас нет дополнительного расширения XSI.
. Вместо этого используйте
printf
:format используется в качестве строки формата, описанной в XBD Format Format Notation [...]
blockquote>\n & lt; newline> Переместите положение печати в начало следующей строки.
blockquote>Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют
echo
как:
- a Встроенный Bash:
help echo
- автономный исполняемый файл:
which echo
, который может привести к некоторой путанице.
Это можно сделать лучше, так как функция
x="\n"
echo -ne $x
-e будет интерпретировать обратные следы для последовательности escape-последовательности. Опция -n удалит конечную новую строку на выходе
PS: Команда echo имеет эффект, всегда включающий завершающую новую строку в выходе, поэтому -n требуется отключить эту вещь (и сделать ее менее запутанной)
Еще одна запись здесь для тех, кто не работал с любым из этих решений, и нужно получить возвращаемое значение из их функции:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
Только этот трюк работал в Linux Я работал над этим bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
Надеюсь, что это поможет кому-то с подобной проблемой.
Вы всегда можете сделать echo ""
.
, например
echo "Hello"
echo ""
echo "World"
Try
echo -e "hello\nworld"
hello
world
работал для меня в nano-редакторе.
Иногда вы можете передать несколько строк, разделенных пробелом, и будет интерпретироваться как \n
.
Например, при использовании сценария оболочки для многострочных уведомлений:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
В bash 4.4
добавлено новое расширение параметра , которое интерпретирует escape-последовательности:
${parameter@operator} - E operator
Расширение - это строка, которая представляет собой значение параметра с последовательностями escape-обратного слэша, расширенными, как и механизм цитирования
blockquote>$'…'
.$ foo='hello\nworld' $ echo "${foo@E}" hello world
echo $'hello\nworld'
печатает
hello
world
$''
строки используют ANSI C Цитирование :
Слова формы
blockquote>$'string'
обрабатываются специально. Слово расширяется до строки с заменой символов с обратным слэшем, как это определено стандартом ANSI C.
Это работает для меня в raspbian,
echo -e "hello\\nworld"
Мой скрипт:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Вывод:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
В моем сценарии bash я злился, пока я не попробовал:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Просто нажмите Enter, где вы хотите вставить этот прыжок. Выходные данные теперь:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
В случае непредвиденного случая, когда кто-то обнаруживает, что он бьется головой о стену, пытаясь понять, почему сценарий коллеги не будет печатать новые строки, обратите внимание на это ->
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
Как и в выше, фактический запуск метода может сам быть обернут в эхо, которое заменяет любые эхо-сигналы, которые могут быть в самом методе. Очевидно, я опустил это для краткости, это было не так просто заметить!
Затем вы можете сообщить своим товарищам, что лучший способ выполнения функций будет таким:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
он работает для меня в centos
echo -e ""hello\nworld""