Сопоставление имен каталогов и выполнение действий с массивом - PullRequest
1 голос
/ 30 июня 2019

Вы можете мне помочь?

Я хочу создать динамическое совпадение папок, и если имя папки соответствует элементу в массиве, то вывод будет инициирован в соответствии с именем папки. Вот пример.

#!/bin/bash
A=("banana"=>"yellow", "apple"=>"red", "watermelon"=>"green")
for dir in fruits/* 
do 
    if [ "$dir" = "{banana, apple or watermelon}" ]; then 
        echo "The color of the fruit is: {fruit-color}"
    fi
done

Но я понятия не имею, как мне начать, я только сделал этот простой код, чтобы вы поняли. Вы можете мне помочь?

Большое спасибо

1 Ответ

2 голосов
/ 30 июня 2019

Ассоциативные массивы создаются следующим образом:

declare -A fruit
fruit=( ["banana"]="yellow" ["apple"]="red" ["watermelon"]="green" )

Ваше условие может быть реализовано как case оператор :

case "$dir" in
    banana|apple|watermelon)
        echo "The color of the fruit is: ${fruit[$dir]}"
        ;;
    *)
        break
esac

Соответствие клавиш немного неуклюже, но может быть сделано:

for key in "${!fruit[@]}"
do
    if [[ "$dir" = "$key" ]]
    then
        echo "The color of the fruit is: ${fruit[$key]}"
    fi
done

Хорошая идея - запустить полученный скрипт через shellcheck, а Wiki Грега - отличное место для изучения Bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...