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

是否可以将延迟的命令执行存储在bash变量中?,bash,shell,command-line,Bash,Shell,Command Line,我已经看过了,但这似乎不适用于这里的问题,除非我误解了它 我想创建一个shell变量,它总是以特定格式计算当前时间。这是我的第一次尝试 foo=$(date +'%H-%M-%S') 不幸的是,这将运行命令并将其结果分配给变量foo。相反,我希望能够说$foo,运行命令并给出结果 为了给出一个更真实的用例,假设我有一个名为WriteOutputTo的(黑匣子)程序,它将要写入输出的文件名作为第一个参数。我希望能够在shell上写下以下内容 ./WriteOutputTo Output_$fo

我已经看过了,但这似乎不适用于这里的问题,除非我误解了它

我想创建一个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'; }
foo() {
    date +'%H-%M-%S'
}

$ foo
22-48-50
$ foo
22-48-52
然后你就可以写了

./WriteOutputTo Output_$(foo)
其他外壳具有实现这一点的机制。例如,在
ksh
中,可以为
foo
定义“get”规程函数:

foo.get() { .sh.value=$(date +'%H-%M-%S'); }

之后,使用
$foo
将返回运行数据命令的结果。

是的,您只需使用bash函数即可:

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

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

这不满足给定的用例,因为bash不会将
Output\u foo
识别为文本字符串
Output\u
和函数调用结果的串联。将输出放入
Output\u$(foo)
中是非常小的一步。问题更多的是关于获取时间的动态方法。实际上,问题是关于保存击键。我已经有了获取时间的动态方法。:)我刚注意到你是最初的询问者。请原谅我对你问题的意图进行了争论:)。你说你希望
Output_$(foo)
是动态的,所以我想你已经从两个答案中找到了答案?是的。然而,我将把这个问题留一点时间,看看是否有人想出了一种方法来杀死
()
,一直到
$foo
。最后,我希望
$T
$(T)
的击键次数增加50%。感谢您关于
ksh
功能的说明。你确定在
bash
中没有办法做到这一点吗?@merlin2011:是的,我确定在bash中没有办法做到这一点。当然,您可以修改bash。Bash是开源的,而且有一个功能性的可加载模块特性,这可能允许实现这个特性。