Для вашей конкретной проблемы это также будет работать, если вы используете Bash, немного сократив свой код, позволив вам опустить конструкцию if
:
currentDate=${dateFromCLI-+%b%d%y}
Выражение справа от знака равенства представляет собой особую форму расширения параметра, общая форма которой:
${variableName-"default value"}
Если определена переменная с именем variableName
, вся конструкция ${}
расширяется до значения переменной.
Однако, если он не определен, конструкция расширяется до значения по умолчанию, справа от буквального дефиса(-
). Переменная считается определенной, если она была назначена ранее и не была отменена впоследствии. Он определяется даже в том случае, если ему было присвоено пустое значение.
Если вы ранее установили dateFromCLI
в пустое значение, вы можете использовать тот же стиль расширения, но с заменой -
на :-
. В этом случае также выбирается значение по умолчанию, если именованная переменная определена, но имеет нулевое значение (пустая строка):
${variableName:-"default value"}
Справочник:Справочное руководство GNU Bash :Расширение параметров оболочки
Переменная TZ
определена согласно POSIX в диапазоне от -24 до +24:
The hour shall be between zero and 24, and the minutes (and seconds)-if present-between zero and 59. The result of using values outside of this range is unspecified. If preceded by a '-', the timezone shall be east of the Prime Meridian; otherwise, it shall be west (which may be indicated by an optional preceding '+' ).
GNU и другие расширили этот диапазон до ±167 часов:
The hours part of the time fields can range from -167 through 167; this is an extension to POSIX.1, which allows only the range 0 through 24
Solaris 11.4 кажется строго POSIX в отношении документации , но GNU -нравится в отношении его реализации (или, возможно, вы используете вариант GNU date
в своем тестировании)
Любое смещение >+12 и <-12 является неопределенным поведением ИМХО.