Получите дату (за день до текущего времени) в Bash

Существует несколько способов сделать это. Общепринятые методики используют рекурсию, memoization, или динамическое программирование. Основная идея состоит в том, что Вы производите список всех строк длины 1, затем в каждом повторении, для всех строк, произведенных в последнем повторении, добавьте что строка, связанная с каждым символом в строке индивидуально. (переменный индекс в коде ниже отслеживает запуск последнего и следующего повторения)

Некоторый псевдокод:

list = originalString.split('')
index = (0,0)
list = [""]
for iteration n in 1 to y:
  index = (index[1], len(list))
  for string s in list.subset(index[0] to end):
    for character c in originalString:
      list.add(s + c)

необходимо было бы тогда удалить все строки меньше, чем x в длине, они будут первыми (x-1) * len (originalString) записи в списке.

157
задан martin clayton 10 November 2009 в 21:36
поделиться

9 ответов

Извините, что не упомянул я в системе Solaris. По существу, переключатель -date недоступен в Solaris bash.

Я обнаружил, что могу получить предыдущую дату с помощью небольшого трюка с часовым поясом.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
4
ответ дан 23 November 2019 в 21:44
поделиться

if you have GNU date and i understood you correctly

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

or

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
250
ответ дан 23 November 2019 в 21:44
поделиться
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
-2
ответ дан 23 November 2019 в 21:44
поделиться

date --date='-1 day'

1
ответ дан 23 November 2019 в 21:44
поделиться
yesterday=`date -d "-1 day" %F`

Помещает вчерашнюю дату в формате ГГГГ-ММ-ДД в переменную $ вчера .

1
ответ дан 23 November 2019 в 21:44
поделиться
#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day
1
ответ дан 23 November 2019 в 21:44
поделиться

Может быть, использовать Perl?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

Или использовать nawk и (ab) использовать / usr / bin / adb:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

Также наткнулся на этот ... безумие!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
3
ответ дан 23 November 2019 в 21:44
поделиться

Расширенное руководство по сценариям на Bash

date +%Y:%m:%d -d "yesterday"

Для получения подробной информации о формате даты см. Справочную страницу для date

date --date='-1 day'
6
ответ дан 23 November 2019 в 21:44
поделиться
date --date='-1 day'
41
ответ дан 23 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

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