在Bash中,测试数组是否包含某个值的最简单方法是什么?
编辑:在答案和评论的帮助下,经过一些测试后,我想出了这个:
function contains() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [ "${!i}" == "${value}" ]; then
echo "y"
return 0
fi
}
echo "n"
return 1
}
A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
echo "contains three"
fi
Run Code Online (Sandbox Code Playgroud)
我不确定它是否是最佳解决方案,但似乎有效.
我正在尝试使用bash来查找任何字符串"sets"中是否存在短字符串.例如,
FRUIT="apple banana kiwi melon"
VEGETABLE="radish lettuce potato"
COLOR="blue red yellow green brown"
MY_CHOICE="kiwi"
MY_CHOICE_GROUP="?"
Run Code Online (Sandbox Code Playgroud)
如何设置MY_CHOICE_GROUP到FRUIT?
我试图使用这个StackOverflow解决方案,但它只适用于单个字符串集.
最初,我使用数组来存储集合中的选项,但是考虑到 bash处理数组迭代的方式,字符串搜索似乎更有效.
非常感谢!