Kannan Lg
Kannan Lg

Reputation: 921

store a function in a unix variable

I am a newbie to unix. I am wondering if there is any way to assign a function to a unix variable, like:

temp=funcname(){echo 'I am in function'};

$temp; // prints I am in function.

Please let me know.

Upvotes: 3

Views: 2212

Answers (3)

Charles Duffy
Charles Duffy

Reputation: 295618

Functions are not first-class in UNIX shells. However, you can store the name of your function in a shell variable and call it thereby.

funcname_foo() {
  echo "I am a function"
}
temp=funcname_foo
"$temp"

That said -- if you wanted to point to a different function conditionally, you could just as easily define it conditionally:

if [ "$foo" = bar ] ; then
  funcname() { echo "Function A"; }
else
  funcname() { echo "Function B"; }
fi
funcname # actually call the function

It is possible to define a function using text from a variable through use of eval; however, this is error-prone and contrary to best practices, and generally should not be done.

If you described your actual use case, a better example of the right way to achieve your desired result should be possible.

Upvotes: 4

Martin
Martin

Reputation: 4862

Use function e.g. in the bash shell:

function manhtm { man -R=ASCII $1 | rman -f HTML > ~/tmp/$1-man.html && firefox ~/tmp/$1-man.html;}

function rff { sudo rfcomm connect $1;}

Upvotes: 0

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 799044

No. Functions are not first-class in traditional *nix shells.

Upvotes: 1

Related Questions