Есть ли структура данных " set " в bash?

Python имеет тип "set", который содержит уникальные объекты. У Баша есть что-то эквивалентное?

Я хочу продолжать добавлять элементы в такой "набор" bash и никогда не иметь дубликатов.

3 ответов


Bash 4.0 имеет ассоциативные массивы, которые можно использовать для построения наборов.

вот статья это обсуждает их (это был первый хит Google для "ассоциативных массивов bash").

(лично я бы просто использовал что-то другое, кроме bash, вероятно, Perl.)


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, где нет ассоциативных массивов


после некоторого googling я нашел хорошую реализацию bash в http://www.catonmat.net/blog/set-operations-in-unix-shell-simplified/. Он имеет все обычные операторы набора несколькими способами, и даже печатный PDF cheatsheet.

я использовал ассоциативные массивы, хотя это гораздо более читабельно.

объявления setA переменной ассоциативный массив:

$ declare -A setA

или объявить и добавить начальные члены одновременно время:

$ declare -A setA=([memberA]=1 [memberB]=1)

добавить участника в набор:

$ setA[memberC]=1