使用read从文件或标准输入获取输入不会存储读取值

时间:2011-07-06 07:12:56

标签: arrays bash

我正在尝试使用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[*]}" )

我得到了正确的输出。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

这是我的解决方案(在弄清楚问题是愚蠢的 - 感谢Ignacio):

IFS="$(printf "\a")" read -ra values < <(some-command | tr '\n' '\a')

问题是Bash的进程替换(<())去除了输出中的新行(关于参数扩展的东西?我不确定)所以我不能使用"\n"作为记录分隔符。因此,我将命令输出中的换行符转换为“可听铃”字符(我不希望在其中找到任何输出),并将其用作记录分隔符。最后,我在每个values元素中得到1行。