Как дате coreutil удается получить такие странные результаты?

Другие уже упомянули это $# количество параметров командной строки, таким образом, я проигнорирую ту часть Вашего вопроса.

Данный cmd1 && cmd2, оболочка сначала выполняется cmd1. Если cmd1 сбои, все сбои выражения. Если cmd1 успешно выполняется, оболочка продолжает выполняться cmd2. Все выражение успешно выполняется если оба cmd1 и cmd2 успешно выполниться. Так, && оператор является булевской переменной замыкания накоротко И примененный к командам оболочки. Использование этого оператора может быть заменено

if cmd1
then
    cmd2
fi

Данный cmd1 || cmd2, оболочка сначала выполняется cmd1. Если это успешно выполняется, все выражение успешно выполняется. Иначе оболочка выполняется cmd2 и успешность или неуспешность выражения определяется cmd2. Короче говоря, это - булевская переменная замыкания накоротко ИЛИ примененный к командам оболочки. Можно заменить эту форму

if ! cmd1
then
    cmd2
fi

Я тщательно использовал фразы, за которыми следуют / успешно выполняется и отказавший / сбои выше. Успех, для команд оболочки, определяется как статус выхода процесса нуля. Отказ является любым ненулевым состоянием. Однако пытаясь понять && и || операторы с точки зрения статусов выхода, по крайней мере, мне, путая, так как Вы заканчиваете со странным видом инвертированной логики.

4
25.04.2013, 17:51
1 ответ

Я думаю, что это берет Ваш + x как спецификатор часового пояса (например, рассмотреть 2013-04-25 19:52:36 +4 допустимая метка времени, в в часовом поясе 4 часа перед UTC).

Это затем видит слово 'минуты' и рассматривает его как синоним минуты, таким образом давая Вам одну минуту спустя.

Если Вы вставляете явный спецификатор часового пояса, он работает:

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

Отметьте UTC после поля секунд. Можно также вставить секунду +0:

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

... но по крайней мере лично, это намного более трудно считать.

Или можно поместить a Z после секунд, и т.д. Вам на самом деле не нужно TZ переменная среды, которая будет установлена на UTC в вышеупомянутых примерах.

11
27.01.2020, 20:47
  • 1
    я соглашаюсь с Вашей интерпретацией. Можно также записать это date -d '1970-1-1 0:0:0 1 minute' и date -d '1970-1-1 0:0:0 1 minute ago' –  Stéphane Chazelas 25.04.2013, 21:01
  • 2
    Спасибо за обнаружение этого! Вы знаете какой-либо более короткий способ получить число секунд продолжительности как "2 дня" с date? (например, сокращение в течение эпохи) –  a3nm 28.04.2013, 15:33
  • 3
    @a3nm Предлагает, чтобы Вы задали вопрос на этом. Продолжительности любой тривиальны (1 day=86,400 секунда) или сложный (какой длины один месяц? Был ли второй прыжок?) –  derobert 28.04.2013, 23:18

Теги

Похожие вопросы