Python有一个“set”类型,它包含唯一的对象。 Bash有同等的东西吗?
我想继续向这样的bash“set”添加元素,并且永远不会有重复。
答案 0 :(得分:13)
Bash 4.0具有关联数组,可用于构建集。
讨论它们的Here's an article(这是Google首次针对“bash关联数组”的搜索)。
(就个人而言,我只使用bash以外的东西,可能是Perl。)
答案 1 :(得分:9)
some_dups=(aa aa b b c)
uniques=($(for v in "${some_dups[@]}"; do echo "$v";done| sort| uniq| xargs))
echo "${uniques[@]}"
给出
aa b c
也在bash 3中,没有关联数组可用
答案 2 :(得分:3)
经过一些谷歌搜索后,我在http://www.catonmat.net/blog/set-operations-in-unix-shell-simplified/找到了一个很好的bash实现。它以多种方式拥有所有常用的操作符,甚至是可打印的pdf cheatsheet。
我使用了关联数组,但它更具可读性。
声明setA
关联数组变量:
$ declare -A setA
或者同时声明并添加初始成员:
$ declare -A setA=([memberA]=1 [memberB]=1)
在集合中添加成员:
$ setA[memberC]=1
测试会员资格:
$ [ -n "${setA[memberC]}" ] && echo in set || echo not in set
in set
$ [ -n "${setA[memberD]}" ] && echo in set || echo not in set
not in set
列出成员:
$ for m in "${!setA[@]}"; do echo $m; done
memberB
memberC
memberA
或:
$ printf '%s\n' "${!setA[@]}"
memberB
memberC
memberA
基数(集合中的成员数量):
$ echo ${#setA[@]}
3
删除成员:
$ unset setA[memberC]