为什么eval无法创建正确的别名?

时间:2018-12-07 23:06:22

标签: bash alias quotes

我有此代码:

foo=bar
eval alias $foo="echo $foo"

但别名创建为

alias bar='echo'

不是

alias bar='echo bar'

为什么$foo在别名定义中没有正确扩展?

1 个答案:

答案 0 :(得分:3)

您需要:

eval alias bar="\"echo $foo\""

或者只是:

eval alias bar=\"echo $foo\"

重点是将双引号作为文字引号传递给eval 命令。您可以使用以下命令检查Bash如何解析给定命令 Control - Alt - e 键绑定,该键绑定首先调用shell-expand-line 键入命令:

eval alias bar="\"echo $foo\""

然后执行键绑定而不是 Enter 。请注意,如果键入eval alias $foo="echo $foo",则会显示:

eval alias bar=echo bar

但是键入eval alias bar=\"echo $foo\"时会显示:

eval alias bar="echo bar"