質問: シェルスクリプトで重複するデータのない配列を作りたいのですが、配列に含まれていないデータのみを代入する、もしくは、代入したとしても配列内のデータの重複を取り除く方法を教えてください。 よろしくお願いいたします。 【想定環境】 bash 3.x
回答: metropolisさんのコメントのように連想配列を使うと、こんな感じでしょうか(bash >= 4.0)。 ``` # 重複のある配列 ary=(foo bar foo baz bar) # aryの各要素を連想配列aaのキーとする declare -A aa for x in "${ary[@]}"; do aa[$x]='' done # aaのキーをaryに入れなおしてできあがり ary=("${!aa[@]}") # aryの全要素を出力してみる echo "${ary[@]}" #=> bar baz foo ``` **追記:** 連想配列を使わないとなるとこんな感じでしょうか。 ``` ary=(foo bar foo baz bar 'a b') ary2=() i=0 while read -r x; do ary2[i++]="$x" done < <(printf '%s\n' "${ary[@]}" | sort -u) ```