Conversão de fuso horário no script Bash

4

Eu encontrei uma solução sobre como converter o fuso horário com o comando date do Linux: Conversão de fuso horário por linha de comando

$ date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010

Está funcionando muito bem, mas não consigo descobrir como usá-lo em um script Bash, quando o tempo é uma variável, como:

TIME=18:00
DATE="'date --date='TZ="Asia/Taipei" $TIME' +%F\ %H:%M'"
echo $DATE;

Eu tenho problemas em escapar de caracteres especiais. E eu não entendo totalmente porque o comando date funciona com fusos horários como BST , EET , etc. e não com fusos horários como "Asia / Taipei", Europa / Moscou, etc.

    
por Aleksandr 18.01.2013 / 08:39

1 resposta

6

Há uma seção intitulada QUOTING em man bash . Sugiro que você o leia, ou o Manual de Referência do Bash sobre como citar .

Uma linha de comando correta seria:

DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )
  • Usar $( ) impede alguns problemas de citação que ocorrem com backticks.
  • Você precisa de aspas duplas no fuso horário (aparentemente por razões de formatação), e aspas duplas para permitir a substituição de variáveis, então apenas escape das aspas internas uma vez.

Não sei ao certo o que você está perguntando em seu último parágrafo, mas observe que o mapeamento de continente / cidade para fuso horário não é bijetivo. Dada uma data e hora em um fuso horário, você não poderá descobrir qual cidade é essa. Vários arquivos em /usr/share/zoneinfo têm as mesmas informações de fuso horário. Além disso, depende de quando executar o comando, devido ao horário de verão, áreas que alteram todo o fuso horário ou outro estranheza relacionada à data .

    
por 18.01.2013 / 08:57