我有此代码:
foo=bar
eval alias $foo="echo $foo"
但别名创建为
alias bar='echo'
不是
alias bar='echo bar'
为什么$foo
在别名定义中没有正确扩展?
答案 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"