Fish Shell:
Использование ассоциативных массивов
Как:
Fish изначально не поддерживает ассоциативные массивы, как Bash 4+, но можно достичь подобной функциональности, используя комбинацию списков и манипуляций со строками. Вот как можно имитировать их:
Сначала настройте элементы “ассоциативного массива” отдельно:
set food_color_apple "red"
set food_color_banana "yellow"
Чтобы получить доступ к элементу, просто обратитесь к нему напрямую:
echo $food_color_apple
# Вывод: red
Если вам нужно итерироваться по ним, используйте цикл-for, учитывая соглашение об именовании:
for food in apple banana
echo $food_color_$food
end
# Вывод:
# red
# yellow
Для тех, кому не хватает возможности Bash ${!array[@]}
для получения всех ключей, вы можете хранить ключи в отдельном списке:
set food_keys apple banana
for key in $food_keys
echo $key 'is' $food_color_$key
end
# Вывод:
# apple is red
# banana is yellow
Погружение
Полноценные ассоциативные массивы, как в других языках сценариев, пока не являются частью подхода Fish. Предложенное решение использует возможности манипуляции со строками и списками Fish для создания псевдо-ассоциативной структуры массива. Хотя это работает, это не так чисто или защищено от ошибок, как было бы с встроенной поддержкой ассоциативных массивов. Другие оболочки, такие как Bash и Zsh, предоставляют встроенную функциональность ассоциативных массивов, что приводит к более простому и понятному коду. Однако философия дизайна Fish стремится к простоте и дружелюбности к пользователю, возможно, за счет таких функций. Предложенное решение удовлетворяет большинство потребностей, но следите за эволюцией Fish Shell — его разработчики активно улучшают и добавляют функции на основе отзывов сообщества.