I'm trying to figure out how to create a dynamic case statement in a bash script.
For example, let's say I have the output of an awk statement with the following contents
red
green
blue
In this scenario, the output can change at any time.
I'm trying to then execute different logic if a value is included in this awk output.
So if the data above is in $list, then I'd conceptually like to do something like:
case "${my_var}" in
$list)
.....
something_else)
.....
esac
I'm trying to use this to build a dynamic custom tab completion function (see http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2 for some background).
Any ideas?
Thanks.
A
case
statement is probably not the right tool for the job. If you store theawk
output in an array then you can loop through the array to find if a choice is in it, and as a bonus can figure out which index that is, too.You can create a dynamic case statement in bash by doing the following:
1) ensure the list is PIPE (|) seperated. IE. red|green|blue
2) wrap your case statement in an eval
For example:
This works for simple variable processing, I can not guarantee this will work in all cases.
You can approach this in a couple of different hacky ways:
You can't do this with a case statement, but it's easy enough to set up your own helper to check for list membership.