check for element

Dealing with containers such as lists or arrays you may want to code a condition like ‘does the array A contains an element (equal to) e’.
How to do this in bash? There are vivid discussions about this issue on relevant sites. As stated by tokland at superuser.com:

It’s an old question.

A frequently proposed solution is this.

A=(4 12 35 43)
e=12
if [[ ${A[@]} =~ $e ]] ; then
    echo "e=$e is in A"
fi

It works fine under certain conditions.

e=5 is in A

If you actually want to rely on the outcome you should iterate over the array, see check-if-an-array-contains-a-value. This comes quite handy and you can even save some lines by using ;.

Advertisements
2 comments
  1. grail said:

    If you are going to bag bash for doing something in a way you do not like, at least have the decency to write a snippet that would actually work. ‘A’ is the array not ‘a’, ‘b’ is never defined and ‘e’ is reassigned. Pretty much a garbage example

  2. rmbj said:

    Thank you, I corrected ‘a’ to ‘A’, ‘b’ to ‘e’ as it was meant to be. Sorry for that. Now the first display works as it is, and outputs ‘e=12 is in A’ as expected. The second display is the output with e=5 and its right, the reassigned is not shown because its supposed to be obvious from the output.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: