如何它是用来每次评估一个shell变量(How to evaluate a shell variab

2019-06-26 22:15发布

与我有一个类似的问题: zsh中不重新计算我的shell提示符

有没有什么办法来定义,使得它的值每次它被称为计算的shell变量?

例如,如果我这样做:

my_date="today is $(date)"

在my_date值将是:今天是星期四8月9日8时06分18秒PDT 2012

但我想用my_date每次执行的日期。 在链接后,有人建议把单引号中值:

my_date='today is $(date)'

但从来没有任何评价,只是在$(日期)从字面上保持。

我使用的zsh 5.0.0

Answer 1:

这是不可能的。 使用函数:

my_date() {
    echo "today is $(date)"
}

# use it
echo "$(my_date)"

注:这是bash的语法; 你的shell可能会使用一个稍微不同的语法。



Answer 2:

你应该在第一种情况下也说过PS1:提示扩展是非常不同的比较变量扩展。 家伙,告诉你应该用PS1='$(command)'单引号是正确的,但他缺少一点:你必须做

setopt promptsubst

以使在提示命令替换(和其他一些取代以及)。

不要紧,不管你之前或设置PS1后设置它,它应该只是显示被选中每次PS1扩展到实际及时提示,选项之前发生。

对于非提示变量@Aaron Digulla完全看错你暂时无法有可能对后续评估改变其值的变量。 但在zsh中,你还可以做两件事情:写一个模块(!在C),并使用${(%%)VAR}这将做给定的变量(提示扩展注意事项:它尊重promptsubst和其他两个提示*选项)。 还有更多有用的${(...)}扩展标志。



文章来源: How to evaluate a shell variable each time it's used