![在命令行上使用 for 循环-变量不起作用?](https://linux22.com/image/1372963/%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%8A%E4%BD%BF%E7%94%A8%20for%20%E5%BE%AA%E7%8E%AF-%E5%8F%98%E9%87%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
命令行上的简单 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} 天"; 完成