我正在尝试使用bash builtin read
从文件或标准输入中读取数据(只要我可以将其输入,这与讨论目的无关),并将它们存储在一个数组中。这有时是有效的,有时也不行,我不确定为什么。
以下是测试用例:
values=(1 2 3)
echo "4 5 6" | read -a values; echo "${values[*]}"
输出应为“4 5 6”,而不是“1 2 3”。另一方面,当像这样运行时:
values=(1 2 3)
echo "4 5 6" | ( read -a values; echo "${values[*]}" )
我得到了正确的输出。
有什么想法吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
这是我的解决方案(在弄清楚问题是愚蠢的 - 感谢Ignacio):
IFS="$(printf "\a")" read -ra values < <(some-command | tr '\n' '\a')
问题是Bash的进程替换(<()
)去除了输出中的新行(关于参数扩展的东西?我不确定)所以我不能使用"\n"
作为记录分隔符。因此,我将命令输出中的换行符转换为“可听铃”字符(我不希望在其中找到任何输出),并将其用作记录分隔符。最后,我在每个values
元素中得到1行。