开发者社区> 问答> 正文

检查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

我不确定这是否是最好的解决方案,但似乎可行。

展开
收起
保持可爱mmm 2020-01-15 09:45:12 477 0
1 条回答
写回答
取消 提交回答
  • 这种方法的优点是不需要遍历所有元素(至少不是显式地)。但是,由于array_to_string_internal()在array.c中仍然循环遍历数组元素并将它们连接成字符串,因此它可能不比所提出的循环解决方案更有效,但更具可读性。

    if [[ " ${array[@]} " =~ " ${value} " ]]; then # whatever you want to do when arr contains value fi

    if [[ ! " ${array[@]} " =~ " ${value} " ]]; then # whatever you want to do when arr doesn't contain value fi

    请注意,如果要搜索的值是带有空格的数组元素中的单词之一,它将给出假肯定。例如

    array=("Jack Brown") value="Jack"

    正则表达式将Jack被视为位于数组中,即使它不在。因此,IFS如果您仍想使用此解决方案,则必须更改正则表达式上的分隔符和

    IFS=$'\t' array=("Jack Brown\tJack Smith") unset IFS

    value="Jack Smith"

    if [[ "\t${array[@]}\t" =~ "\t${value}\t" ]]; then echo "yep, it's there" fi

    问题来源于stack overflow

    2020-01-15 09:45:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载