Search array return index in bash
13,744
Solution 1
Something like that should work:
search() {
local i=1;
for str in "${array[@]}"; do
if [ "$str" = "$1" ]; then
echo $i
return
else
((i++))
fi
done
echo "-1"
}
While looping over the array to find the index is certainly possible, this alternative solution with an associative array is more practical:
array=([1,os]="Linux" [1,type]="Test System"
[2,os]="Windows" [2,type]="Work Station"
[3,os]="Windows" [3,type]="Work Station")
echo "number $1 is a ${array[$1,os]} ${array[$1,type]}"
Solution 2
You could modify this example from this link to return an index without much trouble:
# Check if a value exists in an array
# @param $1 mixed Needle
# @param $2 array Haystack
# @return Success (0) if value exists, Failure (1) otherwise
# Usage: in_array "$needle" "${haystack[@]}"
# See: http://fvue.nl/wiki/Bash:_Check_if_array_element_exists
in_array() {
local hay needle=$1
shift
for hay; do
[[ $hay == $needle ]] && return 0
done
return 1
}
Author by
matt
Updated on June 04, 2022Comments
-
matt almost 2 years
Just pesuocode but this is essentially what I would like to do.
Array=("1" "Linux" "Test system" "2" "Windows" "Workstation" "3" "Windows" "Workstation") echo "number " ${array[search "$1"]} "is a" ${array[search "$1" +1]} ${array[search "$1" +2])}
Is this possible with bash? I could only find info on search and replace. I didn't see anything That would return and index.
-
Sorin over 12 years-1 for the link returning 403 and the answer being totally "obscure"
-
Dan Fego over 12 years@Sorin I'm not getting a 403 with that link.
-
Sorin over 12 years@Dan Fego: I would attach a screenshot if I could. However, the answer is still totally obscure, and lacking even the basic information.
-
Carl Norum over 12 yearsYou're probably right. But the OP should try something (like a simple internet search) before asking, too.
-
Sorin over 12 years@Carl Norum: actually, it took me a while to figure it out. Anyway, removed the down vote, since the now it has a bit more info.
-
Sorin over 12 yearsyou fail to mention that associative arrays are bash 4 only feature