How I can make alias called when it's called b

2019-04-14 03:50发布

问题:

I added an alias:

$ alias anyalias="echo kallel"

If I execute:

$ anyalias
kallel

it executes the echo command without any problem.

Now, if I define a variable in this way:

$ var="anyalias"

and then execute with this way:

$  $var
-ash: anyalias: not found

Then I got a shell error.

How I can make $var running the command defined in the anyalias alias?

I m not looking to change the way of calling $var. But I m looking for a way of changing the definition of the alias or export it.

回答1:

Instead of alias consider using function:

anyfunc() { echo "kallel"; }
v=anyfunc
$v
kallel

Safer is to store the call of function in an array (will store arguments also, if needed):

var=(anyfunc)
"${var[@]}"
kallel


回答2:

That's because alias expansion is performed previous to parameter expansion:
Command-line Processing

As you can see, you can go through the process again with eval, which is not recommended.
Instead, you can use some alternatives as the one by @anubhava.


Example

$ alias anyalias="echo kallel"
$ var=anyalias
$ $var
bash: anyalias: command not found
$ eval $var
kallel

Again, use eval carefully. It's just to illustrate the expansion process.