【问题标题】:Bash : read / readarray multiline inputBash:读取/读取数组多行输入
【发布时间】:2016-03-22 13:30:17
【问题描述】:

我是 bash 新手,我正在尝试编写一个 bash 脚本来保存用户的多行输入(带有换行符的文本、一些代码行等)。我需要允许换行符(当你按“Enter”时)、多行粘贴(当你粘贴几行“Ctrl+V”时)并设置一个新键,而不是“Enter”来验证、发送输入并继续脚本的下一步。

我试过read,但你不能做多行。

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

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

【问题讨论】:

    标签: bash shell


    【解决方案1】:

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

    IFS=$'\n' readarray lines
    

    读取的第一行是${lines[0]},第二行是${lines[1]},以此类推。${#lines[@]} 告诉你有多少行,最后一行是${lines[${#lines[@]}-1]}

    要遍历数组,你应该使用"${lines[@]}",而不是${lines[*]};后者将带你回到循环单个单词。

    【讨论】:

    • 您好,感谢您的回答。我不知道IFS。对于其他感兴趣的人:echo "Enter package names, one per line: hit Ctrl-D on a blank line to stop" IFS=$'\n' readarray lines for line in ${lines[*]} do echo "$line" >> result.txt done
    • 不要尝试将代码块放入 cmets;效果不好。 :) 另请参阅我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2023-04-08
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多