У меня проблемы: мой сценарий не работает должным образом :)

Часть моего кода:

readarray operations < operations.list
### lalala
for ((i=0; i<${#operations[@]}; i++)); do
    echo "Perform ${operations[$i]}"
    case ${operations[$i]} in
            "dog rex" )
                    command1 & ;;
            "cat sam" )
                    command2 & ;;
            * )
                    command3 ;;
    esac
done

Файл operations.list выглядит так

 dog rex
 cat sam
 frog mike
 monster jack

Я ожидаю , что command1, command2 и command3 должны выполняться в фоновом режиме, но это не так . Что я делаю не так?

Заранее спасибо и извините за мой английский :)

1 ответ1

1

Это не работает, потому что элементами вашего массива являются собака \n кошка \n, лягушка \n, монстр \n. Так что ваше дело заявление должно быть:

case ${operations[$i]} in
        dog\n)
                echo "Step dog" & wait ;;
        cat\n)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

Строго говоря, я считаю плохой идеей сбрасывать со счетов возможность того, что невинная душа, возможно, отбросила пробел или два после каждой записи, так что я бы предпочел использовать:

case ${operations[$i]} in
        dog*)
                echo "Step dog" & wait ;;
        cat*)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

но тогда, YMMV.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .