あなたの配列要素のどれも改行文字が含まれていない場合は、あなたがこれを行うことができます:あなたは改行文字を持つ要素から保護するために必要がある場合は、bashの4.4を持っている場合
mapfile -t uniq < <(printf "%s\n" "${RUN_Arr[@]}" | sort -u)
if ((${#uniq[@]} > 1)); then
echo "The elements are not the same: ${uniq[@]}"
# ...
を、簡単な解決策がある(のための-d
オプション)と-z
オプションのヌーやFreeBSDの並べ替え():
:
mapfile -d '' -t uniq < <(printf "%s\n" "${RUN_Arr[@]}" | sort -zu)
if ((${#uniq[@]} > 1)); then
echo "The elements are not the same: ${uniq[@]}"
exit 1
fi
はbashの4.4がなければ、あなたは@ huntekeの答えの適応を使用することができます
for i in "${RUN_Arr[@]:1}"; do
if [[ $i != ${RUN_ARR[0]} ]]; then
printf "The elements are not the same:"
printf "%s\0" "${RUN_Arr[@]}" |
sort -zu |
xargs -0 printf " %s"
printf "\n"
exit 1
fi
done
(これはまだ-z
をサポートして並べ替えが必要です。)
ご回答のおかげで、私は同じアプローチを考えていました。私は、配列内にユニークな要素を取得する関数がある場合、ユニークな要素の数が複数の場合は報告できますかと思います。 –
それ自体はそのような機能はありませんが、それは自分で書くことができなかったわけではありません。私はAwkを使うか、別の言語にアウトソースするか、またはBashのハッシュテーブルを使うかもしれません。 [Bashでハッシュテーブルを定義する方法はこちら](https://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash) – hunteke