在命令行上使用 for 循环-变量不起作用?

在命令行上使用 for 循环-变量不起作用?

命令行上的简单 for 循环:

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]

但我毫无进展——关键是什么?

答案1

您可以使用

-"$i"d

或者

-${i}d

但是,我无法测试该解决方案,因为我的date命令无法识别该-v -1d选项。

答案2

如果您正在使用较新的 bash/gnu 实用程序集:

$ for((i=1;i<10;i+=1)) do date "+%Y-%m-%d" --date="${i} 天"; 完成

在此处输入图片描述

相关内容