シェルスクリプトで重複するデータのない配列を作る方法

投稿者: Anonymous

シェルスクリプトで重複するデータのない配列を作りたいのですが、配列に含まれていないデータのみを代入する、もしくは、代入したとしても配列内のデータの重複を取り除く方法を教えてください。
よろしくお願いいたします。

【想定環境】
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 '%sn' "${ary[@]}" | sort -u)
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *