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

时间:2015-05-20 02:43:21

标签: bash shell command-line

我已经查看了deferred variable expansion,但这似乎不适用于此问题,除非我误解了它。

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

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

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

为了给出一个更真实的用例,假设我有一个名为WriteOutputTo的(黑盒子)程序,它将第一个参数作为写入输出的文件名。我希望能够在shell上编写以下内容。

./WriteOutputTo Output_$foo

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

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

2 个答案:

答案 0 :(得分:3)

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

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

然后你可以写

./WriteOutputTo Output_$(foo)

其他shell有实现此目的的机制。例如,在ksh中,您可以为foo定义“get”纪律函数

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

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

答案 1 :(得分:3)

是的,你可以简单地使用bash函数:

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

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