2016-03-22 44 views
0

我是bash的新手,我试图编写一个bash脚本来保存用户的多行输入(带有换行符的文本,某些代码行等)。我需要允许换行符(当你按下“Enter”时),多行粘贴(当你粘贴几行“Ctrl + V”)并设置一个新的密钥而不是“Enter”来验证时,发送输入并继续脚本的下一步。我试过read,但是你不能做多行。Bash:读取/读取数组多行输入

echo "Enter content :" 
read content 

我发现readarray这里(How to delete a character in bash read -d multiline input?),其允许以按“Enter”为换行,但每个字分离由空间是阵列中的单独的一个例子。我想只有线条分开。

echo "Enter package names, one per line: hit Ctrl-D on a blank line to stop" 
readarray -t pkgs 

你有什么想法吗?或者可能有完全不同的方式来做到这一点?感谢您的帮助。

回答

0

您可以将IFS设置为换行符,以便只有换行符才会分隔数组中的项目。

IFS=$'\n' readarray lines 

第一行读会${lines[0]},第二${lines[1]}${#lines[@]}告诉你有多少行,最后一个将是${lines[${#lines[@]}-1]}

要循环访问数组,您应该使用"${lines[@]}"而不是${lines[*]};后者会让你回到单个单词的循环。

+0

你好,谢谢你的回答。我不知道IFS。对于其他感兴趣的人: 'echo“输入软件包名称,每行一个:在空行上按Ctrl-D以停止” IFS = $'\ n' readarray行 for line in $ {lines [* ]} do \t echo“$ line”>> result.txt done' – Lucien

+0

不要试图在注释中放入代码块;它运作不好。 :)另见我的编辑。 –