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

2019-04-14 04:06发布

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.

2条回答
成全新的幸福
2楼-- · 2019-04-14 04:29

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
查看更多
我想做一个坏孩纸
3楼-- · 2019-04-14 04:36

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

enter image description here

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.

查看更多
登录 后发表回答