Попытка использовать select/case внутри цикла for в bash

avatar
programhur
9 августа 2021 в 05:13
43
1
0

Я создал цикл for и хотел предлагать пользователю после каждого элемента, когда он выбирает Да и продолжает цикл. Таким образом, в идеале опыт должен сначала запрашиваться с вопросом «Хотите ли вы продолжить», затем выбирается «Да», и вывод будет «мы находимся в пункте а», затем снова появляется подсказка с вопросом «Хотите ли вы продолжить?» и если «Да» выбрано во второй раз, отображается вывод «мы находимся в пункте b». У меня проблема, что он всегда застревает на «элементе a», независимо от того, что вводится.

array_of_items=("a" "b" "c")
for i in ${array_of_items}; do
    echo "Do you wish to proceed?"
    select yn in "Yes" "No"; do
        case $yn in
         Yes)
            echo "we are at item $i"
            echo "proceeding to next item";;
         No) 
            exit;;
        esac
    done
done
Источник

Ответы (1)

avatar
user1686
9 августа 2021 в 05:17
3

Блок select будет автоматически повторяться до тех пор, пока не встретится с командой break (немного похожей на "пока правда"), поэтому ваш случай Yes) должен заканчиваться break.

Кроме того, $var и ${var} всегда расширяются до первого элемента массива. Вам нужно ${var[@]}, чтобы получить все элементы, например:

for i in "${array_of_items[@]}"; do
   ...
done