如何将用户输入转换为数组并在某个关键字后停止?

时间:2017-05-03 05:51:27

标签: bash

我想从用户那里获取输入(在运行时)并存储到数组中,直到用户输入,例如" q"。 我在接受输入时遇到问题。到目前为止,我得到的最接近的工作代码如下:

while read inputs
do
array=("${array[@]}" $inputs)
done
echo User1 has:${array[0]}
echo User2 has:${array[1]}
echo User3 has:${array[2]}

Output
User1 has:123
User2 has:asd
User3 has:qw12

但问题是我必须按Ctrl + D(EOF)才能告诉我没有更多的输入。我还尝试过其他方法,其中大多数都是错误的

counter=1
read array;
for i in ${array[@]};do
User$counter=$i
echo User$counter
done

有没有更好的方法来进行数组输入?请帮忙。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用read -n 1

printf "Enter your input [ q to stop ]: "    
input=

while read -rn1 ch && [[ $ch != 'q' ]]; do
    input+="$ch"
done
printf "\ninput=[%s]\n" "$input"

<强>输出:

Enter your input [ q to stop ]: asdfghjklq
input=[asdfghjkl]

您不需要按Enter或ctrl-D。一旦按下q,此循环将终止。

答案 1 :(得分:2)

[ "$inputs" == "done" ] && break 

只需添加此内容并输入 done 即可退出

示例

while read inputs
do
    [ "$inputs" == "done" ] && break 
    array=("${array[@]}" $inputs)
done