我添加了别名:
$ alias anyalias="echo kallel"
如果我执行:
$ anyalias
kallel
它执行echo
命令没有任何问题。
现在,如果我以这种方式定义变量:
$ var="anyalias"
然后以这种方式执行:
$ $var
-ash: anyalias: not found
然后我收到了一个shell错误。
如何让$var
运行anyalias
别名中定义的命令?
我不打算改变调用$var
的方式。但我正在寻找一种改变别名定义或导出别名的方法。
答案 0 :(得分:6)
而不是别名考虑使用函数:
anyfunc() { echo "kallel"; }
v=anyfunc
$v
kallel
更安全的是将函数调用存储在数组中(如果需要,还将存储参数):
var=(anyfunc)
"${var[@]}"
kallel
答案 1 :(得分:2)
这是因为别名扩展是在参数展开之前执行的:
Command-line Processing
如您所见,您可以使用eval
$ alias anyalias="echo kallel"
$ var=anyalias
$ $var
bash: anyalias: command not found
$ eval $var
kallel
再次完成此过程。
相反,你可以使用@anubhava作为一个替代品。
eval
再次,仔细使用{{1}}。它只是为了说明扩展过程。