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

Why is eval failing to create the right alias?

我有这个代码:

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

但别名被创建为

alias bar='echo'

而不是

alias bar='echo bar'

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

你需要:

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"