开发者社区> 问答> 正文

如何从Bash中的数组获取唯一值?

我和这里的问题差不多。

我有一个包含aa ab aa ac aa ad等的数组。现在,我想从该数组中选择所有唯一元素。思想,这将是简单的用sort | uniq或sort -u因为他们在其他问题中提到,但没有在数组中改变...的代码是:

echo echo "${ids[@]}" | sort | uniq 我究竟做错了什么? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 19:32:04 489 0
1 条回答
写回答
取消 提交回答
  • 有点hacky,但是应该这样做:

    echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ' 要将排序后的唯一结果保存回数组,请执行数组分配:

    sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) 如果您的外壳支持herestrings(bash应该),则可以echo通过将其更改为以下内容来节省进程:

    tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' ' 输入:

    ids=(aa ab aa ac aa ad) 输出:

    aa ab ac ad 说明:

    "${ids[@]}"-使用shell数组的语法,无论是作为一部分echo还是在此处使用。该@部分的意思是“数组中的所有元素” tr ' ' '\n'-将所有空格转换为换行符。因为您的数组被shell视为一行上的元素,并用空格分隔;并且因为sort期望输入在单独的行上。 sort -u -仅排序和保留唯一元素 tr '\n' ' ' -将我们先前添加的换行符转换回空格。 $(...)- 命令替换 除了:tr ' ' '\n' <<< "${ids[@]}"是一种更有效的方法:echo "${ids[@]}" | tr ' ' '\n'

    2020-02-08 19:32:23
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

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