是否可以将延迟的命令执行存储在 bash 变量中?

Is it possible to store a deferred command execution in a bash variable?

我已经看过 deferred variable expansion 但这似乎无法解决这里的问题,除非我误解了它。

我想创建一个 shell 变量,它始终以特定格式计算当前时间。 这是我的第一次尝试。

foo=$(date +'%H-%M-%S')

不幸的是,这将 运行 命令并将其结果分配给变量 foo。相反,我希望能够说 $foo 并使用命令 运行 并给我结果。


为了给出一个更真实的用例,假设我有一个名为 WriteOutputTo 的(黑盒)程序,它的第一个参数是要写入输出的文件名。我希望能够在 shell.

上写下以下内容
./WriteOutputTo Output_$foo

我知道这可以通过以下方法完成,但它似乎过于冗长,我想知道是否可以使用短变量代替。

./WriteOutputTo Output_$(date +'%H-%M-%S')

最接近的 bash 是将 foo 定义为一个函数:

foo(){ date +'%H-%M-%S'; }

然后你可以写

./WriteOutputTo Output_$(foo)

其他 shell 具有实现此目的的机制。例如,在 ksh 中,您可以为 foo:

定义 "get" 纪律函数
foo.get() { .sh.value=$(date +'%H-%M-%S'); }

之后任何对 $foo 的使用都会 return 运行 数据命令的结果。

是的,您可以简单地使用一个 bash 函数:

foo() {
    date +'%H-%M-%S'
}

$ foo
22-48-50
$ foo
22-48-52