0

ZSH 之后:从使用相同名称的 zsh 函数调用内置函数运行一个被别名遮蔽的命令,可能期望该命令keyword等效于它们各自的同名令牌类别的内容;以便builtincommand

if [ -z 'love' ]; then echo 'sad world'; keyword else echo 'wonderful world'; fi

相当于

if [ -z 'love' ]; then echo 'sad world'; else echo 'wonderful world'; fi

这个问题是在以下棘手的场景中发现的:能够elsealiefi替换else。请参阅zsh buildtins 可以别名吗?更多细节。

keyword因此,如果该命令存在,实现该功能的假设尝试将是:

别名 alie="keyword else" 别名 else='fi'

因此,总而言之,问题是如何使 zsh 代码的以下和平按上一个命令的预期工作:

if [ -z 'love' ]; then echo 'sad world'; alie echo 'wonderful world'; else
4

1 回答 1

0

这还不是一个可行的解决方案,但这里有一个想法:使用-rflag ofenabledisable内置命令来更改else关键字的可见性。所以:

alias se='enable -r else; if'
alias alie='else'
disable -r else
alias else="fi; disable -r else"

不幸的是,这不起作用

se [ -z 'amo' ]; then echo 'trista mondo'; alie echo 'mirinda mondo'; else
# zsh: parse error near `fi'

然而,这实际上是在“else”替换上出现问题,因为非内联版本确实会进入 else-branch 并打印“mirinda mondo”。

于 2017-12-28T13:52:15.647 回答