Существует несколько способов сделать это. Общепринятые методики используют рекурсию, 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) записи в списке.
Извините, что не упомянул я в системе Solaris. По существу, переключатель -date недоступен в Solaris bash.
Я обнаружил, что могу получить предыдущую дату с помощью небольшого трюка с часовым поясом.
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
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
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
yesterday=`date -d "-1 day" %F`
Помещает вчерашнюю дату в формате ГГГГ-ММ-ДД в переменную $ вчера
.
#!/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
Может быть, использовать 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
Расширенное руководство по сценариям на Bash
date +%Y:%m:%d -d "yesterday"
Для получения подробной информации о формате даты см. Справочную страницу для date
date --date='-1 day'