与我遇到的类似问题有关: zsh not re-computing my shell prompt
有没有办法定义一个shell变量,以便每次调用它时都会计算它的值?
例如,如果我这样做:
my_date="today is $(date)"
my_date中的值为: 今天是2012年8月9日星期四08:06:18
但我希望每次使用my_date时都要执行日期。在链接的帖子中,有人建议将值放在单引号中:
my_date='today is $(date)'
但从不对任何事情进行评估,它只是按字面意思保留在$(日期)。
我正在使用zsh 5.0.0
答案 0 :(得分:6)
那是不可能的。改为使用函数:
my_date() {
echo "today is $(date)"
}
# use it
echo "$(my_date)"
注意:这是bash语法;你的shell可能会使用稍微不同的语法。
答案 1 :(得分:5)
你应该在第一种情况下说过PS1:与变量扩展相比,快速扩展是非常不同的。告诉你应该使用PS1='$(command)'
单引号的家伙是对的,但他错过了一点:你必须这样做
setopt promptsubst
在提示符中启用命令替换(以及其他一些替换)。
无论您是在设置PS1之前还是之后设置它都没关系,它应该在显示提示之前发生,每次PS1扩展到实际提示时都会选中该选项。
对于非提示变量,@ Aaron Digulla完全正确,你无法拥有可能在后续评估中改变其价值的变量。但是在zsh中你还可以做两件事:编写一个模块(在C!中)并使用${(%%)VAR}
,它会对给定变量进行快速扩展(注意:它确实尊重promptsubst和另外两个提示*选项)。有更多有用的${(...)}
扩展标志。