使用参数变量在bash脚本中获取X天前的日期

Kof*_*Kof 18 bash arguments date

我试图在bash脚本中计算动态天数的日期.

这就是我所做的 -

#!/bin/bash
STAMP=`date --date='$1 day ago' +%y%m%d`
Run Code Online (Sandbox Code Playgroud)

但在跑步时myscript 2,它说 -

date: invalid date `$1 day ago'
Run Code Online (Sandbox Code Playgroud)

如何在此公式中使用我的参数值?

Kof*_*Kof 18

如果'替换为'在脚本上的此命令中,它可以工作 -

STAMP=`date --date="$1 day ago" +%y%m%d`
Run Code Online (Sandbox Code Playgroud)

线索是错误响应中使用的两个不同的字符`和' -

date: invalid date `$1 day ago'
Run Code Online (Sandbox Code Playgroud)

bash脚本编写专家(不是我)可以解释为什么会发生这种情况.

  • 正如下面@devnull 所提到的,单引号可以防止变量扩展。您始终可以通过添加 echo 来测试“幕后发生的事情”: echo date --date='$1 day ago' (2认同)

dev*_*ull 9

这是因为变量替换不会在单引号中发生,即'$1' 不会扩展但"$1"会发生.

就这样说

STAMP=`date --date="$1 day ago" +%y%m%d`
Run Code Online (Sandbox Code Playgroud)

要么

STAMP=$(date --date="$1 day ago" +%y%m%d)
Run Code Online (Sandbox Code Playgroud)

会工作.