Запрос ввода в сценарии bash должен выполнить функцию bash - PullRequest
0 голосов
/ 19 февраля 2020

Я хотел бы получить вывод, основанный на вводе, который мы предоставили. Например,

, если я выбрал 1, это должно занять 1-й элемент в массиве, а вывод должен быть My name is test

, если я выбрал 2, это должно занять 2-й элемент в массиве и вывод должен быть My name is test1

аналогично, если я выберу all, вывод должен быть My name is test My name is test1 My name is test2 My name is test3

 a=("test" "test1" "test2" "test3")

testfunction() {
        echo My name is $a
}

echo "Enter a number"
select number in "test" "test1" "test2" "tes3" "all"; do
    case "$number" in
        test)
            testfunction "${a[0]}"; break;;
        test1)
            testfunction "${a[1]}"; break;;
        test2)
            testfunction "${a[2]}"; break;;
        test3)
            testfunction "${a[3]}"; break;;
        all)
            testfunction "${a[@]}"; break;;
    esac
done

Может кто-нибудь, пожалуйста, помогите мне с этим?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Как указано в других ответах, вы должны использовать $1 в вашем testfunction(). Кроме того, вы можете использовать для l oop, чтобы получить желаемый результат при выборе all в качестве ввода.

a=("test" "test1" "test2" "test3")

testfunction() {
        echo My name is $1
}

echo "Enter a number"
select number in "test" "test1" "test2" "test3" "all"; do
    case "$number" in
        test)
            testfunction "${a[0]}"; break;;
        test1)
            testfunction "${a[1]}"; break;;
        test2)
            testfunction "${a[2]}"; break;;
        test3)
            testfunction "${a[3]}"; break;;
        all)
            for i in "${a[@]}"; do testfunction "${i}"; done
            break;;
    esac
done
0 голосов
/ 19 февраля 2020

Вы должны печатать $1 вместо $a в вашем testfunction.

testfunction() {
        echo My name is $*
}

РЕДАКТИРОВАТЬ: Изменение его для рассмотрения "все" дело также.

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