Usando loops for em linha de comando - variável não está funcionando?

4

Simples para loop na linha de comando:

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

... e se eu quiser colocar um comando de data em posso fazer isso:

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

Mas, claro, eu realmente quero que as datas diminuam, então eu substituo o $ i pelo 1, mas acho que recebo ...

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]

Eu presumo que seja porque $ id é reconhecido como $ (id) não ($ i) d, então eu tento,

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"'

e

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]

mas eu estou chegando a lugar nenhum - qual é a chave?

    
por Joe 05.08.2013 / 12:30

2 respostas

5

Você pode usar

-"$i"d

ou

-${i}d

No entanto, não posso testar a solução, pois o comando date não reconhece a opção -v -1d .

    
por 05.08.2013 / 12:34
0

Se você estiver usando um novo conjunto de utilitários bash / gnu:

$ para ((i = 1; i < 10; i + = 1)) data "+% Y-% m-% d" --date="$ {i} dia"; feito

    
por 05.08.2013 / 21:56