#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
orzsh
?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