Есть ли структура данных " 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