是否可以将延迟的命令执行存储在 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
我已经看过 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
:
foo.get() { .sh.value=$(date +'%H-%M-%S'); }
之后任何对 $foo
的使用都会 return 运行 数据命令的结果。
是的,您可以简单地使用一个 bash 函数:
foo() {
date +'%H-%M-%S'
}
$ foo
22-48-50
$ foo
22-48-52