在 bash 中对变量执行别名

在 bash 中对变量执行别名

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

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

有什么方法可以用变量模拟以前的行为吗?

答案1

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

此外,bash(与其他 shell 不同)默认情况下不会扩展脚本中的别名,所以a实际上是这样的不是在 bash 中运行别名。

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

V=a
a () { echo test; }
"$V"     # prints test

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

答案2

就像你说的:

#!/bin/bash
V=a
alias $V="echo test"
echo `a`              #echo the out put of the 'echo test' command which is test 
echo `$V`             #echo the output of $V 'command' which is holding a value itself and it won't be executed as an alias since it's not used directly.

编辑:抱歉,我说变量不能作为命令执行是错误的。

如果变量是命令本身,则可以执行它,但当其值用作别名时则不能执行。在这种情况下,作为别名的值可以单独工作,因为就像您设置了一个别名一样。
但别名不能从变量传递。

相关内容