【问题标题】:Why is eval failing to create the right alias?为什么 eval 无法创建正确的别名?
【发布时间】:2018-12-07 23:06:21
【问题描述】:

我有这个代码:

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

但别名被创建为

alias bar='echo'

而不是

alias bar='echo bar'

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

【问题讨论】:

  • eval alias bar="\"echo $foo\"" 是否按照您的工作方式工作?
  • 是的,确实如此!您可以将其发布为带有解释的答案,我很乐意接受。
  • set -x 日志中可以很清楚地看到,即。在ideone.com/LNazVj(该值已扩展,但未扩展为获取别名值的参数)。

标签: bash alias quotes


【解决方案1】:

你需要:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2016-10-18
    • 2019-12-05
    相关资源
    最近更新 更多