简体   繁体   中英

How I can make alias called when it's called by a variable

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.

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM