Использование ассоциативных массивов

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 — его разработчики активно улучшают и добавляют функции на основе отзывов сообщества.