【问题标题】:Bash : Store Date Format in Variable (Self Evaluating Env Variables)Bash:将日期格式存储在变量中(自评估环境变量)
【发布时间】:2016-08-10 16:09:49
【问题描述】:

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

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

但在上述情况下,MYDATE 仅使用当前日期评估一次。相反,我想在每次调用 $MYDATE 时获取最新日期(每次都像 exec 一样)。我也尝试过

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

但这没有用。

再次,我不想尝试别名或 bash 函数并寻找使用 bash 环境变量来实现这一点。

有什么建议或想法吗?

【问题讨论】:

    标签: bash environment-variables


    【解决方案1】:

    我推荐使用函数:

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

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

    mkdir "foo_$(mydate)"
    

    顺便说一句,您可以使用以下方法使该功能可用于子外壳:

    export -f mydate
    

    Imo 这是最干净的方式。

    【讨论】:

      【解决方案2】:

      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 展开时,值中的任何提示转义序列都会展开,就像您显示提示一样。这不提供执行任意代码的方法,但至少涵盖了您问题中的用例。

      【讨论】:

      • 这很有趣。很高兴听到 4.4 正在解决与此相关的问题。我看到 4.4 beta 可供下载。会试一试的。
      【解决方案3】:

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

      更新变量的一种简单方法是在 $PROMPT_COMMAND 内部进行,例如:

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

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

      【讨论】:

      • 我同意。我想我们是否可以在变量的定义中使用 exec 或 eval 语句,以便每次扩展变量时它都 eval 。类似于:MYDATE='eval $(date +%m%d%Y)'
      • 我还听说过使用 bash 变量进行间接扩展。不确定是否可以在这里应用。如果不能,可以建议将其作为 bash 的增强功能吗?
      • 正如@chepner 建议的那样,一些版本正在开发中。但是为什么没有函数呢?
      • 你在用 a) 显示它们和 b) 你关心显示的样子的功能做什么?
      • ...“函数定义在其环境变量显示中中断”?这没有任何意义:除非您不遗余力地导出它们,否则环境中根本不存在函数。
      猜你喜欢
      • 2021-08-28
      • 2020-11-17
      • 2019-01-08
      • 2020-11-16
      • 2010-10-14
      • 2011-07-04
      • 1970-01-01
      • 2018-01-15
      • 2016-08-27
      相关资源
      最近更新 更多