Я использовал эту функцию, чтобы найти значение в массиве на некоторое время, но я хотел бы улучшить:Bash значение находки в массиве
# Checks if the first argument is found in the subsequent ones.
function my_function_is_value_in() {
local -r NEEDLE=$1
local -ra HAYSTACK=("${@:2}")
local value
for value in "${HAYSTACK[@]}"; do
[[ $value == "$NEEDLE" ]] && return 0
done
return 1
}
теперь я думаю, что назначение «параметр переименования для удобства чтения» массив HAYSTACK
неэффективен, особенно для функции «поиска», потенциально запускать много раз так:
my_function_is_value_in coconut cherry coriander coconut cottage-cheese
ли Bash есть эффективный способ сделать выше или зацикливается через ${@:2}
непосредственно так эффективно, как это может получить?
Сравнение/контраст с perl
's grep(/pattern/ @array)
.. это специальная функция для выполнения именно этого.
'perl's' функция Grep не является эффективной для решения этой задачи. Он выполняет итерацию по всему массиву, даже если первый элемент был совпадением. Никогда не используйте perl 'grep' в булевом контексте, используйте' List :: MoreUtils :: any'. – jordanm