Я думаю, что лучше всего сделать функцию
in_array () {
search=$1
shift # remove first argument from list of args $@
for val; do # equivalent to `for val in "$@"`
if [[ $search = $val ]]; then
return # returns exit code of the successful [[ test ]], 0
fi
done
return 1
}
Возвращает 0
, если значение найдено, иначе 1
, что позволяет использовать его следующим образом:
array1=("value1" "value2" "value3" "value4" "value5" "value6")
array2=("value1" "value3" "value4" "value5")
for i in "${array1[@]}"; do
if in_array "$i" "${array2[@]}"; then
echo "$i in array1 is in array2"
fi
done
Обратите внимание, что для циклического перебора всех значений массива правильное расширение равно "${array[@]}"
(с двойными кавычками и [@]
).