получить множественные значения в командной строке и сохранить в массиве - PullRequest
2 голосов
/ 08 апреля 2019

Я хочу получить несколько значений от пользователя в моем bash-скрипте.

например, мне нужно иметь цикл для получения $x значений в приглашении, как это:

Enter parameter 1 : 10
Enter parameter 2 : 12
Enter parameter 3 : 24

Я написал этот код:

x=3
for (( i=1; i<=$x; i++ ))
do
    read -p "Enter parameter ${i} : "  params
done

for i in ${params[@]}
do
   echo $i
done

этот код показывает подсказку 3 раза и получает 3 разных значения, но когда я пытаюсь показать значения в for i in ${params[@]}, я получу только самое последнее значение.

что мне делать?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Другой способ - просто добавить временную переменную в выходной массив:

#!/usr/bin/env bash

x=3 params=()
for (( i = 1; i <= x; ++i )); do
   IFS= read -rp "Enter parameter #$i: " tmp || continue
   params+=("$tmp")
done

printf '%s\n' "${params[@]}"
1 голос
/ 08 апреля 2019

Назовите запись в массиве, которую read должен сохранить:

params=()
for (( i=1; i<=$x; i++ ))
do
    read -p "Enter parameter ${i} : "  'params[i]'
done

Например:

bash-5.0$ foo=()
bash-5.0$ read foo[1]
ls
bash-5.0$ read foo[2]
ls
bash-5.0$ read foo[3]
bar
bash-5.0$ echo "${foo[@]}"
ls ls bar
bash-5.0$ echo "${!foo[@]}"
1 2 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...