我已经查看了deferred variable expansion,但这似乎不适用于此问题,除非我误解了它。
我想创建一个shell变量,它始终以特定格式计算当前时间。这是我的第一次尝试。
foo=$(date +'%H-%M-%S')
不幸的是,这将运行命令并将其结果分配给变量foo
。相反,我希望能够说$foo
并运行命令并给我结果。
为了给出一个更真实的用例,假设我有一个名为WriteOutputTo
的(黑盒子)程序,它将第一个参数作为写入输出的文件名。我希望能够在shell上编写以下内容。
./WriteOutputTo Output_$foo
我意识到这可以通过以下方法完成,但它似乎过于冗长,我想知道是否可以使用短变量。
./WriteOutputTo Output_$(date +'%H-%M-%S')
答案 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