我使用此函数暂时在数组中查找值,但我想改进它:
# 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
}
我现在认为对#34;参数的赋值是为了便于阅读"数组HAYSTACK
效率低下,特别是对于"搜索"功能,可能会多次运行:
my_function_is_value_in coconut cherry coriander coconut cottage-cheese
Bash是否有一种有效的方法来执行上述操作,或者直接循环遍历${@:2}
并尽可能高效地进行循环?
与perl
' s grep( /pattern/ @array)
进行比较/对比..这是一个专门执行此功能的功能。
答案 0 :(得分:1)
你可能会从中获得更好的结果,但我没有做任何测量来证明这两种方式:
function my_function_is_value_in()
{
local -r NEEDLE=$1
shift
local value
for value in "$@"
do
[[ $value == "$NEEDLE" ]] && return 0
done
return 1
}
我们的想法是shell不需要以这种方式复制参数数组;应该加快速度。
答案 1 :(得分:0)
似乎比显式循环更快:
my_function_is_value_in ()
{
[[ "${@:2}" =~ "$1" ]] && return 0 || return 1
}