2017-08-30 50 views
0

我的目标是将用户输入读取到数组中以供以后在bash脚本中使用。只要用户知道按下CTRL + D来终止readarray命令,它就可以在用户输入并将其放入数组中的情况下工作。readarray关键字停止值

有没有告诉读取数组,一旦它遇到特定的关键字,如“完成”或“结束”,停止读取输入行?

我试着仰视的方式来终止命令,但我新打坏,所以我不知道这是可能的一段时间/ for循环,如:

echo Type 'done' when finished 
while true 
do 
    readarray -t serverlist 

if [ "$LINE" = "done" ] 
then 
    false 
fi 
done 
+0

可能是'break'? 。祝你好运。 – shellter

+0

不幸的是,我拥有的代码在很多方面很可能是错误的。它甚至不会终止CTRL + D上的readarray,我认为它创建了一个无限的真正循环。我尝试了休息,结果是一样的。尽管谢谢你的回应! – Mormodes

+0

你确实有'完成了'关闭'while'循环? (未在上面的代码中显示,请修复)。祝你好运。 – shellter

回答

1

readarray是阅读其所有标准输入,包括任何哨兵像doneend,然后才有机会对其进行测试。您必须按照read逐行读取输入,并将每个适当的行附加到数组中。

echo 'Print "done" when finished' 
while IFS= read -r line; do 
    [[ $line = done ]] && break 
    serverlist+=("$line") 
done 
+0

谢谢@chepner,这是有效的,但我确实将“$ line = end”更改为“$ line = done”,否则它希望你输入“end”来停止输入。我感谢帮助! – Mormodes