在将命令读入bash数组时如何保留空行?

时间:2014-03-19 14:20:34

标签: bash

我正在使用bash创建一个输出一组值的脚本(每行一个),然后运行它,然后将输出放入一个数组中。我想将空行保留为空数组元素,因为空值仍然是一个值,这是匹配我期待的值列表的唯一方法。

因此对于以下bash代码:

> IFS=$'\n'
> foo=( $(echo 'foo bar'; echo; echo; echo baz) )
> echo ${#foo[@]}
2

我预计会看到4个输出,因为有四行输出。相反,只包含带有内容的行,因此数组中只有两个值。

以下替代方案没有帮助:

> foo=( `echo 'foo bar'; echo; echo; echo baz` )
> echo ${#foo[@]}
2
> foo=( "$(echo 'foo bar'; echo; echo; echo baz)" )
> echo ${#foo[@]}
1

如何做到这一点?

1 个答案:

答案 0 :(得分:5)

如果您使用bash 4或更高版本,

readarray -t foo < <(echo 'foo bar'; echo; echo; echo baz)

在早期版本中,我建议采用更零碎的方法:

foo=()
while IFS= read -r; do
    foo+=( "$REPLY" )
done < <(echo 'foo bar'; echo; echo; echo baz)