gpt4 book ai didi

arrays - 如何在 bash shell 脚本中将多行输入读取到数组中

转载 作者:行者123 更新时间:2023-11-29 09:10:54 27 4
gpt4 key购买 nike

这是在 bash 中将多行输入读取到数组中的正确方法吗?

arr=( $(cat) ); 
echo "{arr[@]}"

我将这一行放入脚本中,并尝试通过在每一行之后按回车键来读取多个输入,但是脚本继续获取输入并且不会通过进入第二行来打印数组的元素,当我在输入控制台按 ctrl C 脚本终止。请建议从命令行读取多行输入的正确方法是否正确?

最佳答案

几个要点:

首先,不要使用 Ctrl-C,而是使用 Ctrl-D 来结束输入:Ctrl-C 会中断脚本(它发送 SIGINT 信号),而 Ctrl-D 是 EOF(传输结束)。

要打印数组,每行一个字段,使用

printf '%s\n' "${arr[@]}"

现在,坏方法:

arr=( $(cat) )
printf '%s\n' "${arr[@]}"

这很糟糕,因为它受到分词和路径名扩展的影响:尝试输入 hello word*,你会看到不好的事情发生。

要实现你想要的:Bash≥4 你可以使用 mapfile 如下:

mapfile -t arr
printf '%s\n' "${arr[@]}"

或者,对于旧版 Bash,您可以使用循环:

arr=()
while IFS= read -r l; do
arr+=( "$l" )
done
printf '%s\n' "${arr[@]}"

如果你想在输入时打印每一行,使用循环版本可能更容易:

arr=()
while IFS= read -r l; do
printf '%s\n' "$l"
arr+=( "$l" )
done

如果您喜欢冒险,可以像这样使用 mapfile 的回调:

cb() { printf '%s\n' "$2"; }
mapfile -t -c1 -C cb arr

关于arrays - 如何在 bash shell 脚本中将多行输入读取到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41345039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com