Как использовать оператор array in case в оболочке bash?

#bash #shell #scripting

#bash #оболочка #сценарии

Вопрос:

При написании сценария bash я столкнулся с проблемой, когда я хочу использовать оператор array in case для выполнения команд.
Например, если мой массив содержит

 1 2 3
  

и в моем случае есть условия

 1)
  echo "Hello"
  ;;

2)
  echo "call"
  ;;

3)
  echo "bye"
  ;;

*)
  echo "Unknown"
  ;;
  

затем он выводит вывод

 Hello
call
bye
  

для всех элементов, хранящихся в моем массиве, следует проверить условия.
при этом я попробовал это

 case ${!arr[@]} in
  1)
    echo "Hello"
    ;;

  2)
    echo "call"
    ;;

  3)
    echo "bye"
    ;;

  *)
    echo "Unknown"
    ;;
esac
  

но это не сработало, кто-нибудь может мне помочь.

Если какая-то ошибка. Пожалуйста, не отмечайте мой пост

Комментарии:

1. Используете ли вы bash or zsh ?

2. в основном я работаю на обоих @Cyrus, но я предпочитаю bash

3. @PradyumnaKrishna: Я удаляю теги zsh и sh, потому что они не связаны с вашим вопросом.

4. @PradyumnaKrishna: Если вы выполните a echo ${!arr[@]} , вы увидите, что это расширяется до 0 1 2 (индексов arr ), и это не имеет смысла в case инструкции.

Ответ №1:

Вы должны перебирать массив и, таким образом, применять оператор case к каждому элементу по очереди:

 for element in "${arr[@]}"; do
    case ${element} in
    1)
        echo "Hello"
        ;;

    2)
        echo "call"
        ;;

    3)
        echo "bye"
        ;;

    *)
        echo "Unknown"
        ;;
    esac
done