在bash中对变量执行别名

Col*_*e C 4 bash alias shell-script

我在 bash 脚本中发现了这种奇怪的行为。

#!/bin/bash
V=a
alias $V="echo test"
echo $(a)                 #returns 'test'
echo $($V)                #returns ...'a: not found'
Run Code Online (Sandbox Code Playgroud)

有没有办法用变量模拟以前的行为?

Gil*_*il' 8

只有当命令直接出现在代码中时,别名才会被扩展,没有任何扩展。编写诸如\a$V$(echo a)等内容会抑制别名查找。

此外,庆典(不像其他壳)不会扩大默认脚本别名无论如何,所以a实际上并没有在bash运行别名。

使用函数而不是别名。您需要使用原始名称来定义函数。

V=a
a () { echo test; }
"$V"     # prints test
Run Code Online (Sandbox Code Playgroud)

(还有其他方法可以通过使用eval来做您想做的事情,但eval除非您确切地知道自己在做什么,否则不要使用。正确引用事物 witheval是很棘手的。)