我想在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[@]}
中的值时,我只会得到最新的值。
我该怎么办?
答案 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