sort
значением по умолчанию использует всю строку в качестве ключа
join
использование только указанное поле как ключ.
Необходимо исправить эту несовместимость путем ограничения вида для использования только ключа, на котором Вы хотите присоединиться.
Состояния страницы справочника Соединения:
Важный: FILE1 и FILE2 должны быть отсортированы на объединяющих полях. Например, используйте 'вид-k 1b, 1', если> 'соединение' не имеет никаких опций. Примечание, сравнения соблюдают правила, указанные 'LC_COLLATE'. Если> вход не будет отсортирован, и к некоторым строкам нельзя присоединиться, то предупреждающее сообщение будет дано.
Вы можете использовать ассоциативный массив:
declare -A versions
for value in "${ruby_versions[@]}"; do
versions["${value##*::}"]=1
done
printf "%s\n" "${!versions[@]}"
1.7.4
1.7.13
2.1.1
или с трубопроводом:
mapfile -t versions < <(printf "%s\n" "${ruby_versions[@]}" | sed 's/.*:://' | sort -u)
printf "%s\n" "${versions[@]}"
1.7.13
1.7.4
2.1.1
echo "${ruby_versions[@]}" | sed 's/\S\+:://g;s/\s\+/\n/g'| sort -u
выводы:
1.7.13
1.7.4
2.1.1
Или если вы хотели бы builtins
unset u
for i in "${ruby_versions[@]}"
do
if [[ ! $u =~ ${i##*::} ]]
then
u=${u:+$u\\n}${i##*::}
fi
done
echo -e "$u"