Bash:在变量中存储日期格式(自我评估Env变量)

时间:2016-08-10 16:09:50

标签: bash environment-variables

我想将格式化日期存储在变量中,并希望每次都使用该格式。 例如:

    export MYDATE=$(date +%m%d%Y)
    mkdir myfolder_$MYDATE

但在上述情况下,MYDATE仅使用当前日期评估一次。相反,我希望每次调用$ MYDATE(每次都像exec这样的东西)时得到最新的日期。我也试过

     export MYDATE='$(date +%m%d%Y)'

但这没用。

同样,我不想尝试别名或bash函数,并希望使用bash环境变量来实现这一点。

有任何建议或想法吗?

3 个答案:

答案 0 :(得分:1)

在Bash 4.3(当前版本)和更早版本中,环境变量计算一次,存储为字符串(导出或不导出),然后只要引用变量就会检索该字符串。要每次都获得更新的字符串,除了使用您似乎知道的别名或函数之外别无他法。

更新变量的一种hacky方式是在$PROMPT_COMMAND内进行,例如:

PROMPT_COMMAND='MYDATE=$(date +%m%d%Y)'

但是,这只会在每次重绘提示时运行。

答案 1 :(得分:1)

bash 4.4(尚未发布)中,您可以执行以下操作:

$ mydate="\D{%m%d%Y %T}"
$ echo "${mydate@P}"
08102016 12:22:02
# wait a few seconds
$ echo "${mydate@P}"
08102016 12:22:05

展开mydate时,会扩展值中的任何提示转义序列,就像显示提示一样。这不提供执行任意代码的方法,但至少会覆盖您问题中的用例。

答案 2 :(得分:1)

我建议使用一个功能:

function mydate(){
    date +%m%d%Y
}

然后使用command substitution将值插入字符串:

mkdir "foo_$(mydate)"

顺便说一句,您可以使用以下命令使子函数可用于

export -f mydate

Imo这是最干净的方式。