Конструкция ${var:-val}
будет использовать значение по умолчанию val
, если переменная var
не установлена во время этого вызова. Это всего лишь одно из многих удобных расширений параметров. У меня есть скрипт, который сгенерирует эту полезную шпаргалку:
${V} Base string |reallyextremelylongfilename.ext
--- Default substitutions ---
${nullvar} Provided example case |
${#nullvar-def} Default value if unset or null |def
${#nullvar:-def} Default value if unset |def
--- Default assignments ---
${1} Provided example case |
${$1=def} Default value if unset or null |def
${$1:=def} Default value if unset |def
--- String metadata ---
${#V} String length |31
--- Substring extraction ---
${V:6} Substring from position |extremelylongfilename.ext
${V:6:9} Substring with length from pos. |extremely
--- Substring deletion ---
${V#*a} Delete shortest prefix match |llyextremelylongfilename.ext
${V##*a} Delete longest prefix match |me.ext
${V%e*} Delete shortest suffix match |reallyextremelylongfilename.
${V%%e*} Delete longest suffix match |r
--- Substring replacement ---
${V/long/short} Replace first match |reallyextremelyshortfilename.ext
${V/#r*a/REA} Replace prefix match |REAme.ext
${V/%.e*/.dat} Replace suffix match |reallyextremelylongfilename.dat
${V//e/II} Replace all matches |rIIallyIIxtrIImIIlylongfilIInamII.IIxt
--- Other handy things ---
${V?Message} exit 1 with 'Message' output if V is not set or is null
${V:?Message} exit 1 with 'Message' output if V is not set
${V+Value} If V is set, use 'Value', otherwise null
Проще всего указать часовой пояс в среде при запуске команды date
:
$ TZ=America/New_York date
Wed Jul 17 07:16:39 EDT 2019
Изman date
:
Show the time on the west coast of the US (use tzselect(1) to find TZ)
$ TZ='America/Los_Angeles' date
Это работает путем установки переменной TZ
в новое значение только для команды date
.