在提示中获取多个值并存储在数组中

时间:2019-04-08 10:52:16

标签: bash loops

我想在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 个答案:

答案 0 :(得分:2)

另一种方法是简单地将temp变量附加到输出数组:

#!/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 :(得分:1)

命名数组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