我想知道某个问题: 我想使用数学表达式“增加”一个日期,使用两个变量。
一个 bash 脚本有一个变量(日期):
TS=$(日期 +%y-%m-%d)
我想在一个循环中处理它:
for((i=1; i<=$iquant; i++))
do
FTS=`date '+%y-%m-%d' -d "$TS+'$i*$iquant' days"`
FFTS=`date '+%y-%m-%d' -d "$FTS+'$idays' days"`
echo $FTS
echo $FFTS
done
运行控制台时显示:
date: invalid date ‘16-11-06+'1*5' days’
date: invalid date ‘+'5' days’
似乎没有计算变量...使用反引号应该可以防止这种情况发生?有没有人有建议或更好的方法来解决这个问题?问候乔西
系统:4.4.0-21-通用 LINUX UBUNTU
最佳答案
在 bash 中,文本连接是默认的。要显式计算某些内容,请使用带有美元+双括号的表达式,如下所示:数学”上下文:$((i*iquant))
(不需要美元前缀)
并删除单引号,这会误导 date
命令的解析。
固定代码(使用 iquant=5
,今天运行):
TS=$(date +%y-%m-%d)
for((i=1; i<=iquant; i++))
do
FTS=`date '+%y-%m-%d' -d "$TS + $((i*iquant)) days"`
FFTS=`date '+%y-%m-%d' -d "$FTS + $idays days"`
echo "$FTS"
echo "$FFTS"
done
结果:
16-11-11
16-11-12
16-11-16
16-11-17
16-11-21
16-11-22
16-11-26
16-11-27
16-12-01
16-12-02
关于Linux bash//日期 : Working with variables and date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455102/