4

Простой цикл в командной строке:

cobrakai$for((i=1;i<=10;i+=1)); do echo "Welcome $i times"; doneWelcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
Welcome 6 times
Welcome 7 times
Welcome 8 times
Welcome 9 times
Welcome 10 times

... и если я хочу добавить команду даты, я могу сделать это:

cobrakai$for((i=1;i<=10;i+=1)); do  echo $(date -v -1d "+%Y-%m-%d"); done
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04
2013-08-04

Но, конечно, я на самом деле хочу, чтобы даты отсчитывались, поэтому я заменяю $ i на 1, но получаю, что получаю ...

for((i=1;i<=10;i+=1)); do  echo $(date -v -$id "+%Y-%m-%d"); done
-: Cannot apply date adjustment
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

Я предполагаю, что это потому, что $ id распознается как $(id), а не ($ i)d, поэтому я стараюсь,

cobrakai$for((i=1;i<=10;i+=1)); do  echo $(date -v -($i)d "+%Y-%m-%d"); done
-bash: command substitution: line 1: syntax error near unexpected token `('
-bash: command substitution: line 1: `date -v -($i)d "+%Y-%m-%d"'

а также

for((i=1;i<=10;i+=1)); do  echo $(date -v -$i d "+%Y-%m-%d"); done
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

но я никуда не деться - какой ключ?

2 ответа2

5

Ты можешь использовать

-"$i"d

или же

-${i}d

Однако я не могу проверить решение, так как моя команда date не распознает опцию -v -1d .

0

Если вы используете более новый набор утилит bash/gnu:

$ for((i = 1; i <10; i+= 1)) do date "+% Y-% m-% d" --date = "$ {i} день"; сделанный

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .